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)

ここで何が起こっているのですか?印刷でそのエラーが発生するのはなぜですか?

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

future モジュールから unicode_literals をインポートすると、希望どおりに動作するはずです。追加するだけ

from __future__ import unicode_literals

ファイルの一番上の行として。リンクしたコードは、Daniel Roseman のように動作します。

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