在Python 2.7x中调用u'\ 1234'.decode('utf-8')是什么意思?

时间:2014-05-09 18:19:53

标签: python python-2.7 unicode encoding utf-8

今天早些时候,一位同事问我,我找不到合理的答案。 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解码字符串的含义我不清楚。

2 个答案:

答案 0 :(得分:6)

这是Python 2疣。在使用指定的编码重新解码之前,首先使用默认编码对Unicode字符串进行解码对其进行编码。由于默认编码通常是ASCII,因此您会看到错误。

答案 1 :(得分:1)

在字符串上调用decode会尝试从指定的编码中获取它并将其转换为默认编码。在您的情况下,默认编码是ASCII,并且无法用ASCII表示'\ u1234'。