这是我的问题,我有一个我想修复的错误编码的变量。长话短说,我结束了:python编码转换
myVar=u'\xc3\xa9'
这是不对的,因为它是字符“E”或\u00e9
UTF-8编码,不是Unicode。
我试过的编码/解码组合似乎都没有解决这个问题。我看着bytearray对象,但你必须提供一个编码,而且显然没有一个适合。
基本上我需要重新解释字节数组到正确的编码。任何想法如何做到这一点? 谢谢。
这是我的问题,我有一个我想修复的错误编码的变量。长话短说,我结束了:python编码转换
myVar=u'\xc3\xa9'
这是不对的,因为它是字符“E”或\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'
修复产生错误内容的代码开始。
是的,我知道应该做些什么,而解决问题的根源是最好的解决方案。但是,我处于一种我无法做到的情况,所以我会采取工作方式,这正是我想要的。谢谢。 – gregseth
看起来'c.encode('iso-8859-15')。decode('utf-8')。encode('utf-8')'也可以。我在特殊情况下吗? – gregseth
@gregseth:不。许多编码重叠。对于大多数标准ASCII字符而言,UTF-8的含义就像ASCII一样。我不知道这个评论中的“作品”是什么意思,因为解码创建Unicode之后再编码再次重新创建字节是没有意义的。 Python代码以Unicode编码。期。外部文件被编码(输出)和解码(输入)。除了文件I/O之外,没有其他用于编码和解码的用途。 –
hacky解决方案:用ord
拉出代码点,然后用chr
构建其中的字符(长度为一个字符串),然后粘贴到一起并解码。
>>> u = u'\xc3\xa9'
>>> s = ''.join(chr(ord(c)) for c in u)
>>> unicode(s, encoding='utf-8')
u'\xe9'
UTF-8是unicode。 –
你想结束什么,unicode或str? – pajton
@ X-Istence:nope unicode是一个*号*代表一个字符,而UTF-8是该编号的一个*编码*(例如UTF-16,UTF-32 ...) – gregseth