如果pythonunicode对象被错误地解码了怎么办

2024-09-27 21:33:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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' .

这就是我在控制台中简单地键入unicodavar时的样子。 实际上,这就是걸스데이미니앨범3집的表示。是 啊!是韩国语。显然,这个变量被错误地解码成unicode。 我从来没有在我的程序中使用Unicodavar。上面显示的结果是什么

'\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'

问题是,如何从变量的角度得到正确的表示?也就是说只使用Unicodavar?在


Tags: unicodexafx8bxb1xb8xb0xecx88
2条回答

使用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而不是{}对其进行解码。你最好把那部分换掉。在

^{pr2}$

如果您有一个在开始时没有u的字符串,不要在开头添加u,只需使用utf-8编码对其进行解码,以获得unicode字符串:

>>> print '\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')
걸스데이미니앨범 3집

相关问题 更多 >

    热门问题