2011-07-29 7 views
5

に設定されたデフォルトのエンコーディングと印刷を使用して:Dive into Python: Unicode DiscussionなしはUnicodeError読んだ後にASCII

私はindic scriptで私の名前をプリントしてみてくださいする好奇心旺盛です。 defaultencodingがそのようにUnicodeからASCIIへの自動強制が動作してはならないASCIIに設定されているので、私は私にUnicodeErrorを与えることprint nameを期待していた

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

- 私はv2.7.2を使用しています。

私には何が欠けていますか?

+2

誰もが本当に最高で、Pythonの3ないレガシーのPython 2を使用しているしかし、あなたは[補足正規表現ライブラリ](HTTPが必要になります持っていました。 org/pypi/regex)、これはUnicodeで 're'が壊れているためです。そして、あなたは本当にそれをすることができません。なぜなら、Pythonの恐ろしいUCS-²/ 4 heisenbugsのためです。 – tchrist

答えて

9

print uses sys.stdout.encoding、ないsys.getdefaultencoding()

Pythonは端末に接続され、その出力を見つけると、それは端末のエンコーディングに sys.stdout.encoding属性を設定します。ステートメントのハンドラーprint は、ユニコード引数を自動的に str出力にエンコードします。 //pypi.python:Pythonで深刻なUnicodeの仕事をしようとする

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