6

对我来说,unicode 出现奇怪的错误。我处理 unicode 很好,但是当我今天早上运行它时,一个项目 u'\u201d' 给出了错误并给了我

UnicodeError: ASCII encoding error: ordinal not in range(128)

我查看了代码,显然是 utf-32,但是当我尝试在解释器中对其进行解码时:

c = u'\u201d'
c.decode('utf-32', 'replace')

或与它相关的任何其他操作,它只是在任何编解码器中都无法识别它,但我发现它是“正确的双引号”

我得到:

Traceback (most recent call last):
File "<pyshell#154>", line 1, in <module>
    c.decode('utf-32')
  File "C:\Python27\lib\encodings\utf_32.py", line 11, in decode
    return codecs.utf_32_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201d' in position 0: ordinal not in range(128)
4

1 回答 1

9

您已经有一个 unicode 字符串,无需再次将其解码为 un​​icode 字符串。

在这种情况下发生的情况是,python 会帮助您先为您编码,然后您可以从utf-32. 它使用默认编码来执行此操作,恰好是 ASCII。这是一个显式编码,向您展示在这种情况下引发的异常:

>>> u'\u201d'.encode('ASCII')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201d' in position 0: ordinal not in range(128)

简而言之,当你有一个 unicode 文字时u'',不需要解码它。

阅读Python Unicode HOWTO中的 unicode、编码和默认设置。关于该主题的另一篇宝贵文章是 Joel Spolsky 的Minimun Unicode 知识帖。

于 2012-09-22T16:58:35.823 回答