突然str.decode('unicode_escape')停止工作[2.7.3]

时间:2015-05-21 19:50:00

标签: python unicode

这个片段取自我最近的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)

可能的原因是什么?

1 个答案:

答案 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)