2011-07-29 27 views
5

默認編碼,打印時,看完後沒有UnicodeError:Dive into Python: Unicode Discussion使用與設置爲ASCII

我好奇地嘗試在indic script打印我的名字。我使用v2.7.2 -

>>> import sys 
>>> sys.getdefaultencoding() 
'ascii' 
>>> name = u'\u0935\u0948\u092D\u0935' 
>>> print name 
वैभव 

我期待print name給我UnicodeError因爲defaultencoding設置爲ASCII所以自動脅迫ASCIIUnicode不應該工作。

我錯過了什麼?

+2

任何人試圖做嚴肅的Unicode工作在Python有真正使用Python的最好3,不遺留的Python 2.但是,你需要[補充regex庫(HTTP://pypi.python。 org/pypi/regex),因爲're'在Unicode上被破壞。而你真的無法做到這一點,因爲Python中可怕的UCS-2/4 heisenbugs。 – tchrist

回答

9

print uses sys.stdout.encoding,不sys.getdefaultencoding()

當Python認定其附連到終端輸出,它設置 sys.stdout.encoding屬性到終端的編碼。打印 語句的處理程序將自動將unicode參數編碼爲 str輸出。

>>> import sys 
>>> print(sys.stdout.encoding) 
utf-8 
>>> print(sys.getdefaultencoding()) 
ascii 
>>> name = u'\u0935\u0948\u092D\u0935' 
>>> print name 
वैभव