这个片段取自我最近的python作品。它过去工作得很好
strr = "What is th\u00e9 point?"
print strr.decode('unicode_escape')
但现在它抛出了unicode解码错误:
Traceback (most recent call last):
File "C:\Users\Lenon\Documents\WorkDir\pyWork\ocrFinale\F1\tests.py", line 49, in <module>
print strr.decode('unicode_escape')
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 10: ordinal not in range(128)
可能的原因是什么?
答案 0 :(得分:3)
您已经启用了unicode文字,或者错误地通过其他方式创建了 Unicode 对象。
strr
值已经一个unicode对象,因此为了解码值,Python首先尝试将编码转换为字节字符串。
如果您的代码有实际的字节字符串:
>>> strr = "What is th\u00e9 point?"
>>> strr.decode('unicode_escape')
u'What is th\xe9 point?'
但是只要strr
实际上是一个Unicode对象,就会在Python尝试首先使用默认的ASCII编解码器编码对象时收到错误:
>>> strr.decode('unicode_escape').decode('unicode_escape')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 10: ordinal not in range(128)
可能是您启用了unicode_literals
,例如:
>>> from __future__ import unicode_literals
>>> strr = "What is th\u00e9 point?"
>>> type(strr)
<type 'unicode'>
>>> strr.decode('unicode_escape')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 10: ordinal not in range(128)