1

我有一本包含一些 Unicode 字符的字典,并且我使用的控制台设置为打印 UTF-8,但是当我尝试从字典中打印密钥时,我得到了一个错误。

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)

这里发生了什么?为什么 print 给我这个错误?

4

2 回答 2

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)
于 2013-02-11T22:05:42.473 回答
1

如果你从未来的模块中导入 unicode_literals,它应该表现得像你想要的那样。只需添加

from __future__ import unicode_literals

作为文件中的最上面一行。然后,您链接的代码将表现得像 Daniel Roseman 的:

print u"{0}: {1}".format(k, v)
于 2013-07-23T14:42:59.890 回答