python编码转换

时间:2011-06-27 20:25:51

标签: unicode encoding utf-8 python-2.6

这是我的问题,我有一个我想修复的错误编码变量。长话短说,我最终得到:

myVar=u'\xc3\xa9'

这是错误的,因为它是字符'é'或\u00e9 UTF-8编码,而不是unicode。

我试过的编码/解码组合似乎都没有解决问题。我看向了bytearray对象,但你必须提供一个编码,显然它们都不适合。

基本上我需要将字节数组重新解释为正确的编码。有关如何做到这一点的任何想法? 感谢。

2 个答案:

答案 0 :(得分:5)

你应该做什么。

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

修复产生错误内容的代码。

答案 1 :(得分:1)

hacky解决方案:使用ord提取代码点,然后使用chr构建字符(长度为一个字符串),然后将批次粘贴在一起并进行解码。

>>> u = u'\xc3\xa9'
>>> s = ''.join(chr(ord(c)) for c in u)
>>> unicode(s, encoding='utf-8')
u'\xe9'