我有一个包含一些Unicode字符的字典,而我正在使用的控制台设置为打印UTF-8,但是当我尝试从字典中打印密钥时,我收到错误。< / p>
import sys
print u'\xc9'
print sys.stdout.encoding
unicode_dict = {u'a': 3,
u'b': 4,
u'c': 5,
u'\xc9': 1,
u'\xc8': 2}
for k, v in unicode_dict.iteritems():
print "{0}: {1}".format(k, v)
当我运行此代码时,出现以下错误:
É
UTF-8
a: 3
Traceback (most recent call last):
File "unicodetest.py", line 12, in <module>
print "{0}: {1}".format(k, v)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xc9' in position 0: ordinal not in range(128)
这里发生了什么?为什么打印会给我这个错误?
答案 0 :(得分:3)
这一行:
print "{0}: {1}".format(k, v)
表示您正在尝试将字符串转换为ASCII,如错误所示。不要这样做:要么保持unicode,要么输出以根据需要进行转换:
print u"{0}: {1}".format(k, v)
或使用支持这些字符的东西显式转换它,可能是utf-8:
print "{0}: {1}".format(k.encode('utf-8'), v)
答案 1 :(得分:1)
如果从future模块导入unicode_literals,它应该表现得像你想要的那样。只需添加
from __future__ import unicode_literals
作为文件中的最顶行。然后你链接的代码就像Daniel Roseman的那样:
print u"{0}: {1}".format(k, v)