我有一个 unicode 变量,比如 unicodeVar。例如,u'\xea\xb1\xb8\xec\x8a\xa4\xeb\x8d\xb0\xec\x9d\xb4 \xeb\xaf\xb8\xeb\x8b\x88\xec\x95\xa8\xeb\xb2\x94 3\xec\xa7\x91' .
这就是我在控制台中简单地输入 unicodeVar 时的样子。
其实这就是걸스데이 미니앨범 3집的表现。是的!是韩文。显然,这个变量被错误地解码为 unicode。
我从来没有在我的程序中使用 unicodeVar 得到这个。上面的显示结果是
'\xea\xb1\xb8\xec\x8a\xa4\xeb\x8d\xb0\xec\x9d\xb4 \xeb\xaf\xb8\xeb\x8b\x88\xec\x95\xa8\xeb\xb2\x94 3\xec\xa7\x91'.decode('utf-8')
如果我这样做:
unicodeVar.decode('unicode-escape')
,结果是一个带有双斜杠的字符串。喜欢
'\\xea\\xb1\\xb8\\xec\\x8a\\xa4\\xeb\\x8d\\xb0\\xec\\x9d\\xb4 \\xeb\\xaf\\xb8\\xeb\\x8b\\x88\\xec\\x95\\xa8\\xeb\\xb2\\x94 3\\xec\\xa7\\x91'
问题是,如何从可变方式获得正确的表示?这意味着只使用 unicodeVar 吗?
最佳答案
使用 latin1
编码对字符串进行编码以获得完整的字节。然后使用正确的编码(在本例中为 utf-8
)对其进行解码:
>>> s = u'\xea\xb1\xb8\xec\x8a\xa4\xeb\x8d\xb0\xec\x9d\xb4\xeb\xaf\xb8\xeb\x8b\x88\xec\x95\xa8\xeb\xb2\x94 3\xec\xa7\x91'
>>> print(s.encode('latin1').decode('utf-8'))
걸스데이미니앨범 3집
为什么会这样?
您的程序(或库)的某些部分将 utf-8 编码的字节视为
latin1
,使用 latin1
而不是 utf-8
对其进行解码。你最好改变那部分。>>> utf_8_bytes = u'걸스데이미니앨범 3집'.encode('utf-8')
>>> utf_8_bytes.decode('latin1')
u'\xea\xb1\xb8\xec\x8a\xa4\xeb\x8d\xb0\xec\x9d\xb4\xeb\xaf\xb8\xeb\x8b\x88\xec\x95\xa8\xeb\xb2\x94 3\xec\xa7\x91'
关于python - 如果 python unicode 对象被错误解码怎么办,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21703447/