今天早些时候,一位同事问我,我找不到合理的答案。 S / O似乎有一些接近的答案,但我无法找到特别回答的东西。
如果我在64位Ubuntu 12.04上运行2.7x解释器,我得到:
>>> u'\u1234'.decode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u1234' in position 0: ordinal not in range(128)
Python docs on the subject表示Python将Unicode字符串表示为16位或32位整数。当用utf-8解码时,Python是否会尝试读取那些用utf-8编码的8位字符的整数?如果是这样,为什么错误是UnicodeEncodeError而不是UnicodeDecodeError?
我希望能更好地理解这一点。在Unicode字符串上调用decode时采取了哪些步骤?使用已经从utf-8编码解码的utf-8解码字符串的含义我不清楚。
答案 0 :(得分:6)
这是Python 2疣。在使用指定的编码重新解码之前,首先使用默认编码对Unicode字符串进行解码对其进行编码。由于默认编码通常是ASCII,因此您会看到错误。
答案 1 :(得分:1)
在字符串上调用decode
会尝试从指定的编码中获取它并将其转换为默认编码。在您的情况下,默认编码是ASCII,并且无法用ASCII表示'\ u1234'。