我无法显示单词项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 解释了一下,但我仍然明显遗漏了一些东西。
答案 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"'
“替换”可以防止任何我们没有解决的问题。