2011-07-29 15 views
5

Después de leer: Dive into Python: Unicode Discussionsin UnicodeError cuando se utiliza impresión con una codificación por defecto configurado como ASCII

que tiene curiosidad por probar la impresión de mi nombre en el indic script. Estoy usando v2.7.2 -

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

yo esperaba que me diera print nameUnicodeError ya que el defaultencoding se establece en ASCII por lo que la auto-coerción para ASCII de Unicode no debería funcionar.

¿Qué me estoy perdiendo?

+2

Cualquiera que intente hacer un trabajo serio Unicode en Python tenía realmente mejor estar usando Python 3, no el legado de Python 2. pero se necesita [una biblioteca de expresiones regulares suplementaria] (http: //pypi.python. org/pypi/regex), ya que 're' está roto en Unicode. Y realmente no puedes hacerlo, debido a los horribles heisenbugs UCS-²/₄ en Python. – tchrist

Respuesta

9

print uses sys.stdout.encoding, no sys.getdefaultencoding():

Cuando Python encuentra su salida conectado a un terminal, se establece el atributo sys.stdout.encoding a la codificación de la terminal. El controlador de la instrucción print codificará automáticamente los argumentos unicode en la salida str.

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