Python 3.6、utf-8转unicode、带双反斜杠的字符串
Python 3.6, utf-8 to unicode conversion, string with double backslashes
关于 utf-8 > unicode 转换的问题很多,但我仍然没有找到问题的答案。
让字符串像这样:
a = "Je-li pro za\xc5\x99azov\xc3\xa1n\xc3\xad"
Python3.6像Je-li pro一样理解这个字符串za\xc5\x99azov\xc3\xa1n\xc3\xad。我需要将这个类似 utf-8 的字符串转换为 unicode 表示形式。最后的结果应该是Je-li pro zařazování.
With a.decode("utf-8")
我得到 AttributeError: 'str' object has no attribute 'decode', 因为 Python 意味着对象是已经解码。
如果我先使用 bytes(a, "utf-8")
将其转换为字节,则反斜杠仅加倍,然后 .decode("utf-8")
returns 再次变为我当前的 a
。
如何从这个 a
?
中获取 unicode 字符串 Je-li pro zařazování
您必须 encode/decode 4 次才能得到想要的结果:
print(
"Je-li pro za\xc5\x99azov\xc3\xa1n\xc3\xad"
# actually any encoding support printable ASCII would work, for example utf-8
.encode('ascii')
# unescape the string
# source:
.decode('unicode-escape')
# latin-1 also works, see
.encode('iso-8859-1')
# finally
.decode('utf-8')
)
此外,如果可以,请考虑告诉您的目标程序(数据源)提供不同的输出格式(例如字节数组或 base64 编码)。
unsafe-but-shorter方式:
st = "Je-li pro za\xc5\x99azov\xc3\xa1n\xc3\xad"
print(eval("b'"+st+"'").decode('utf-8'))
有ast.literal_eval
,但可能不值得在这里使用。
关于 utf-8 > unicode 转换的问题很多,但我仍然没有找到问题的答案。
让字符串像这样:
a = "Je-li pro za\xc5\x99azov\xc3\xa1n\xc3\xad"
Python3.6像Je-li pro一样理解这个字符串za\xc5\x99azov\xc3\xa1n\xc3\xad。我需要将这个类似 utf-8 的字符串转换为 unicode 表示形式。最后的结果应该是Je-li pro zařazování.
With a.decode("utf-8")
我得到 AttributeError: 'str' object has no attribute 'decode', 因为 Python 意味着对象是已经解码。
如果我先使用 bytes(a, "utf-8")
将其转换为字节,则反斜杠仅加倍,然后 .decode("utf-8")
returns 再次变为我当前的 a
。
如何从这个 a
?
您必须 encode/decode 4 次才能得到想要的结果:
print(
"Je-li pro za\xc5\x99azov\xc3\xa1n\xc3\xad"
# actually any encoding support printable ASCII would work, for example utf-8
.encode('ascii')
# unescape the string
# source:
.decode('unicode-escape')
# latin-1 also works, see
.encode('iso-8859-1')
# finally
.decode('utf-8')
)
此外,如果可以,请考虑告诉您的目标程序(数据源)提供不同的输出格式(例如字节数组或 base64 编码)。
unsafe-but-shorter方式:
st = "Je-li pro za\xc5\x99azov\xc3\xa1n\xc3\xad"
print(eval("b'"+st+"'").decode('utf-8'))
有ast.literal_eval
,但可能不值得在这里使用。