关于utf-8>有很多问题。 unicode转换,但我仍然没有找到我的问题的答案。
让我们有这样的字符串:
a = "Je-li pro za\\xc5\\x99azov\\xc3\\xa1n\\xc3\\xad"
Python 3.6理解这个字符串,如 Je-li pro za \ xc5 \ x99azov \ xc3 \ xa1n \ xc3 \ xad 。我需要将这个类似utf-8的字符串转换为unicode表示。最终的结果应该是 Je-liprozařazování。
使用a.decode("utf-8")
我得到 AttributeError:'str'对象没有属性'decode',因为Python意味着对象已经被解码。
如果我首先使用bytes(a, "utf-8")
将其转换为字节,则反斜杠只会加倍,.decode("utf-8")
会再次将其返回到我当前的a
。
如何从a
获取unicode字符串 Je-liprozařazování?
答案 0 :(得分:4)
您必须编码/解码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: https://stackoverflow.com/a/1885197
.decode('unicode-escape')
# latin-1 also works, see https://stackoverflow.com/q/7048745
.encode('iso-8859-1')
# finally
.decode('utf-8')
)
此外,如果可以,请考虑告诉目标程序(数据源)提供不同的输出格式(例如字节数组或base64编码)。
不安全但更短的方式:
st = "Je-li pro za\\xc5\\x99azov\\xc3\\xa1n\\xc3\\xad"
print(eval("b'"+st+"'").decode('utf-8'))
有ast.literal_eval
,但在这里可能不值得使用。