为什么我的字典中的Unicode字符不能打印?

时间:2013-02-11 22:02:30

标签: python unicode

我有一个包含一些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)

这里发生了什么?为什么打印会给我这个错误?

2 个答案:

答案 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)