2012-04-25 8 views
5

Possible Duplicate:
Python, Unicode, and the Windows consolePython: emitiendo una cierta cadena UTF-8 a las ventanas de la consola

leí algunas cadenas de archivo y cuando intento imprimir estas cadenas UTF-8 en la consola de Windows, me sale error

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128) 

he tratado de configurar la consola de codificación UTF-8 con "65001 chcp" Pero de lo que este mensaje de error

LookupError: unknown encoding: cp65001 
+6

Reparado en Python 3.3. –

+1

¿hay alguna solución para python 2.7? – Meloun

+0

Esta pregunta ha aparecido varias veces. Aquí hay un ejemplo con una solución alternativa que puede funcionar o no: http://stackoverflow.com/questions/5419/python-unicode-and-the-windows-console –

Respuesta

3

Te recomiendo que consultes preguntas similares en stackoverflow, hay muchas de ellas.

De todos modos, puede hacerlo de esta manera:

  1. lectura de archivo en cualquier codificación (por ejemplo, UTF-8), pero decodificación cuerdas a unicode
  2. para la consola de ventanas, salida de Unicode cuerdas. No necesita codificar en este caso especial. No es necesario configurar la codificación de la consola, el texto de salida se codificará correctamente de forma automática.

Para los archivos, necesita utilizar el módulo de códecs o codificar con la codificación adecuada.

+0

Buen consejo, pero debe tenerse en cuenta que si espera compatibilidad con varios idiomas en la consola, esto no lo proporcionará. –

+0

¿esto realmente funcionó para usted? Obtengo 'LookupError: unknown encoding: cp65001' incluso antes de leer el primer byte del archivo. Parece totalmente sin relación con los contenidos de cuerdas. Es como si Python careciera de la comprensión de 'cp65001', pero de todos modos lo intentas, y esto nunca funcionará a menos que trabajes con él o uses Python 3.3, si tuviera que adivinarlo. – n611x007

+1

@naxa Sí, Python no entiende cp65001. No conecte a 65001. O al menos use 'set PYTHONIOENCODING = utf-8' antes de llamar a python. Ver también https://stackoverflow.com/questions/878972/windows-cmd-encoding-change-causes-python-crash – Jiri

1

El comando de impresión intenta convertir cadenas Unicode a la codificación admitida por la consola. Proveedores:

>>> import sys 
>>> sys.stdout.encoding 
'cp852' 

Le muestra qué codificación de los soportes de la consola (lo que se le dice a Python para ser soportado). Si el personaje no se puede convertir a esa codificación, no hay forma de mostrarlo correctamente.

Cuestiones relacionadas