如果一个python unicode对象被错误解码了怎么办

如果一个python unicode对象被错误解码了怎么办,python,string,unicode,character-encoding,Python,String,Unicode,Character Encoding,我有一个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。

我有一个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')
如果我这样做:
unicodavar.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?

使用
latin1
编码对字符串进行编码,以获得完整的字节。然后使用正确的编码对其进行解码(本例中为utf-8):

为什么会这样? 程序(或库)的某些部分将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'

如果该字符串开头没有
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집

如果OP有一个字节字符串,并且终端编码是UTF-8,OP不需要解码它。它不是一个文本字符串,它来自一个变量。对不起,您没有击中它。:)你是怎么把这个值输入变量的?理想情况下,您应该首先修复程序中获取该信息的部分,而不是在之后尝试重新编码…:)它是pyquery模块中函数的返回值。这个函数似乎没有什么问题:就像PyQuery(#title).html()@prehawk,
#title
从哪里来?似乎获取网页内容的库没有正确处理编码(字符集),或者网页本身缺少编码信息。@falsetru Yeah!这是一个库名pyquery。这个网页是用utf-8编码的。它可以工作!还有更多的问题,所有像u'\xea\xb1'这样的unicode都是错误解码的结果,你怎么知道它被明确编码为拉丁语1而不是其他?@prehawk,没有上下文,我不知道unicode是什么意思。如果你能读韩语,阅读会很有帮助。所以这不是一种常见的方式,对吗?。是否有任何建议,通常处理错误解码的unicodes。我不确定我是否会遇到中文或日本的其他字符集或其他东西。@prehawk,如回答中所述,使库以正确的编码解码内容。@prehawk,如果库本身无法获取编码信息,并且它接受某种
编码/charaset
参数,显式传递编码。
>>> 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집