我遇到了一个问题,我有一个变量被错误地编码了,我想要修复它。简而言之,我得到了以下内容:
myVar=u'\xc3\xa9'
这是错误的,因为它是字符'é'或\u00e9
UTF-8编码,而不是Unicode。
我尝试过所有的编码/解码组合都无法解决问题。我转向了bytearray对象,但必须提供一种编码方式,显然没有一种适合。
基本上,我需要重新解释字节数组到正确的编码方式。有什么想法吗?谢谢。
我遇到了一个问题,我有一个变量被错误地编码了,我想要修复它。简而言之,我得到了以下内容:
myVar=u'\xc3\xa9'
这是错误的,因为它是字符'é'或\u00e9
UTF-8编码,而不是Unicode。
我尝试过所有的编码/解码组合都无法解决问题。我转向了bytearray对象,但必须提供一种编码方式,显然没有一种适合。
基本上,我需要重新解释字节数组到正确的编码方式。有什么想法吗?谢谢。
>>> b='\xc3\xa9'
>>> b
'\xc3\xa9'
>>> b.decode("UTF-8")
u'\xe9'
由于您没有展示导致问题的错误代码,我们只能让一个复杂的问题变得更加复杂。
这似乎是您所看到的问题。
>>> c
u'\xc3\xa9'
>>> c.decode("UTF-8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
>>> [ chr(ord(x)) for x in c ]
['\xc3', '\xa9']
>>> ''.join(_)
'\xc3\xa9'
>>> _.decode("UTF-8")
u'\xe9'
修复一开始就产生错误的代码。
c.encode('iso-8859-15').decode('utf-8').encode('utf-8')
也可以工作。我处于一个特殊情况吗? - gregseth一种巧妙的解决方案:使用ord
提取代码点,然后使用chr
将其构建为字符(长度为一的字符串),然后将所有内容粘贴在一起并进行解码。
>>> u = u'\xc3\xa9'
>>> s = ''.join(chr(ord(c)) for c in u)
>>> unicode(s, encoding='utf-8')
u'\xe9'