Python中的UTF-32

时间:2012-09-22 18:46:13

标签: python 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中显示它,以便检查输出然后将其存储为纯文本。 Transform unicode string in python 解释了一下,但我仍然明显遗漏了一些东西。

2 个答案:

答案 0 :(得分:6)

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

一般情况下,我建议您仔细阅读http://farmdev.com/talks/unicode/ ...

答案 1 :(得分:2)

如果您已阅读The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),您就会知道没有像纯文本那样的事情 ..

但是,既然你坚持要追求什么和人们试图解释的东西之间似乎没有相遇,我开始想知道是否“将这个符号转换为纯文本”你意思是“用引号(U + 0022)替换Unicode右双引号(U + 201D),然后编码为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"' 

“替换”可以防止任何我们没有解决的问题。