3

我无法显示 unicode 项目u'\u201d'。我对其他 unicode 项目没有问题。我使用了 UTF-8,但随后这个字符出现并在我的代码上下雨了。我在解释器中尝试了不同的东西。但基本上在哪里:

c = u'\u201d'

我收到此错误:

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)

我需要在 GUI 中显示它,以便检查输出,然后将其存储为纯文本。 在 python 中转换 unicode 字符串 解释了一点,但是我仍然明显遗漏了一些东西。

4

2 回答 2

7

如果您遇到此异常,那么您正在尝试调用.decode()unicode 字符串。您应该只调用.decode()一个字节字符串,并且只调用.encode()一个 unicode 字符串。否则,解释器将首先使用默认编解码器(通常是“ascii”)隐式编码或解码字符串,这是个坏消息。

一般来说,我建议仔细阅读http ://farmdev.com/talks/unicode/ ...

于 2012-09-22T18:56:12.280 回答
2

如果您已经阅读了每个软件开发人员绝对、肯定必须了解 Unicode 和字符集(没有借口!)的绝对最低要求,您就会知道没有纯文本之类的东西..

但是,由于在您坚持要追求的东西和人们试图解释的东西之间似乎没有达成共识,我开始怀疑“将符号转换为纯文本”是否意味着类似“将 Unicode 右双引号 (U+201D) 替换为引号 (U+0022),然后编码为 ASCII”。例如,类似:

In [45]: s = u"“curly quoted”"

In [46]: s
Out[46]: u'\u201ccurly quoted\u201d'

In [47]: print s
“curly quoted”

然后手动进行替换(搜索“unicode string sanitize”,您会发现更好的配方,包括针对不同字符的更多“降级”):

In [51]: fixer = dict.fromkeys([0x201c, 0x201d], u'"')

In [52]: s.translate(fixer)
Out[52]: u'"curly quoted"'

In [53]: s.translate(fixer).encode("ascii", "replace")
Out[53]: '"curly quoted"' 

“替换”可以防止任何我们没有修复的东西。

于 2012-09-22T19:22:49.687 回答