2013-02-11 122 views
1

我有一個字典,有一些Unicode字符,我使用的控制檯設置爲打印UTF-8,但是當我嘗試從字典中打印鍵時,出現錯誤。爲什麼我的字典中的Unicode字符未打印?

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) 

這到底是怎麼回事?爲什麼印刷給我這個錯誤?

回答

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) 
+0

謝謝!出於某種原因,我認爲,由於格式化函數中有Unicode字符,因此格式化字符串將自動以Unicode編碼。 – supercheetah 2013-02-11 22:45:23

1

如果您從未來模塊導入unicode_literals,它應該像您希望的那樣工作。只需添加

from __future__ import unicode_literals 

作爲您的文件中最頂端的行。那麼你鏈接的代碼將表現得像丹尼爾羅斯曼的:

print u"{0}: {1}".format(k, v) 
相關問題