2011-08-10 41 views
11

Me gustaría configurar mi consola en Windows XP para que sea compatible con UTF8 y que python lo detecte y trabaje con él.Obteniendo python para imprimir en UTF8 en Windows XP con la consola

Hasta ahora, mis intentos:

C:\Documents and Settings\Philippe>C:\Python25\python.exe 
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> print u'é' 
é 
>>> import sys 
>>> sys.stdout.encoding 
'cp437' 
>>> quit() 

Así, por defecto yo estoy en cp437 y Python detecta que muy bien.

C:\Documents and Settings\Philippe>chcp 65001 
Active code page: 65001 

C:\Documents and Settings\Philippe>python 
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.stdout.encoding 
'cp65001' 
>>> print u'é' 
C:\Documents and Settings\Philippe> 

Parece que la impresión en UTF8 hace accidente pitón ahora ...

+0

Lo que sí hará pensar que imprime utf8 aquí en primer lugar? –

+0

Acabo de actualizar mi respuesta, esto fue agregado en Python 3.3. –

+0

Véase también: http://stackoverflow.com/a/30505612/788700 – Adobe

Respuesta

8

I would like to configure my console on Windows XP to support UTF8

No creo que vaya a suceder.

La página de códigos 65001 tiene errores; algunas llamadas stdio se comportan incorrectamente y rompen muchas herramientas. Si bien se puede registrar cp65001 como una codificación manual:

def cp65001(name): 
    if name.lower()=='cp65001': 
     return codecs.lookup('utf-8') 

codecs.register(cp65001) 

y esto le permite a print u'some unicode string', que no permite escribir caracteres no ASCII en esa cadena Unicode. Obtiene los mismos errores impares (IOError 0 y otros) que hace cuando intenta escribir secuencias no ASCII UTF-8 directamente como cadenas de bytes.

Desafortunadamente UTF-8 es un ciudadano de segunda clase en Windows. El modelo Unicode de NT se diseñó antes de que existiera UTF-8 y, en consecuencia, se espera que utilice codificaciones de unidad de dos bytes por código (UTF-16, originalmente UCS-2) en cualquier lugar que desee Unicode coherente. El uso de cadenas de bytes, como muchas aplicaciones e idiomas portátiles (como Python), escritos con C stdio, no se ajusta a ese modelo.

Y volver a escribir Python para usar las llamadas de la consola Unicode de Windows (como WriteConsoleW) en lugar de las portátiles C stdio no funciona bien con trucos de shell como tuberías y redirigir a un archivo. (Sin mencionar que todavía tiene que cambiar de la fuente de terminal predeterminada a TTF antes de poder ver los resultados funcionando ...)

En definitiva, si necesita una línea de comando con soporte UTF-8 para las aplicaciones basadas en stdio, probablemente sería mejor usar una alternativa a la Consola de Windows que lo soporte deliberadamente, como Cygwin's, IDLE de Python o PythonWin de pywin32.

+0

Ok, entonces aprenderé mejor a trabajar con cp437, entonces ... –

4

Cuando intento lo mismo en Python 2.7 me sale un error en import sys:

LookupError: unknown encoding: cp65001

Esto implica que Python no sabe cómo trabajar con la página especial de códigos UTF-8 de Windows, y 2.5 manejó la situación de manera desvergonzada.

Al parecer, este fue investigado y no fija en Python 3.2: http://bugs.python.org/issue6058

Actualización: En What's New In Python 3.3 enumera cp65001 apoyo como una nueva característica.

+0

No, Python 3.2 se cuelga cuando 'chcp 65001' también está activo. Ese problema en particular se cerró como inválido, no se corrigió. –

+0

@Mark Tolonen, gracias por la actualización. Obviamente, mis habilidades de comprensión de lectura necesitan mejoras. –

0

Tuve problemas para mostrar el símbolo del euro en la consola del cmd desde una secuencia de comandos de Python con Windows Vista. Esto es lo que funcionó para mí:

Puño, necesito asegurarme de que la fuente esté configurada como Lucinda Console y no de fuentes de trama que no funcionen.Esto se puede hacer estableciendo las propiedades predeterminadas de la consola en el menú desplegable de la ventana de la consola y reiniciando la ventana de la consola con cmd.exe.

En segundo lugar, cuando ejecuto cmd configuro la página de códigos con chcp 1252.

En tercer lugar, me aseguro de que mi editor (Notepad ++) tenga la configuración de codificación correcta. En el menú desplegable Encoding en Notepad ++, seleccione Encode in UTF-8.

Eso funcionó para mí.

0

conjunto esto en su victoria:

set PYTHONIOENCODING=utf-8 
Cuestiones relacionadas