Actualización: Python 3.6 implementa PEP 528: cambie la codificación de la consola de Windows a UTF-8 : la consola predeterminada en Windows ahora aceptará todos los caracteres Unicode. Internamente, utiliza la misma API Unicode que el win-unicode-console
paquete mencionado a continuación . print(unicode_string)
Debería funcionar ahora.
Me sale un UnicodeEncodeError: 'charmap' codec can't encode character...
error
El error significa que los caracteres Unicode que está intentando imprimir no se pueden representar utilizando la chcp
codificación de caracteres de la consola actual ( ). La página de códigos suele ser una codificación de 8 bits, comocp437
que puede representar solo ~ 0x100 caracteres de ~ 1M caracteres Unicode:
>>> u "\ N {SIGNO EURO}". codificar ('cp437')
Rastreo (llamadas recientes más última):
...
UnicodeEncodeError: el códec 'charmap' no puede codificar el carácter '\ u20ac' en la posición 0:
mapas de caracteres para
Supongo que esto se debe a que la consola de Windows no acepta caracteres solo Unicode. ¿Cuál es la mejor manera de evitar esto?
La consola de Windows acepta caracteres Unicode e incluso puede mostrarlos (solo BMP) si la fuente correspondiente está configurada . WriteConsoleW()
API debe usarse como se sugiere en la respuesta de @Daira Hopwood . Se puede llamar de forma transparente, es decir, no es necesario y no debe modificar sus scripts si usa el win-unicode-console
paquete :
T:\> py -mpip install win-unicode-console
T:\> py -mrun your_script.py
Vea ¿Cuál es el trato con Python 3.4, Unicode, diferentes idiomas y Windows?
¿Hay alguna manera de hacer que Python imprima automáticamente en ?
lugar de fallar en esta situación?
Si es suficiente para reemplazar todos los caracteres no codificables ?
en su caso, entonces podría configurar PYTHONIOENCODING
envvar :
T:\> set PYTHONIOENCODING=:replace
T:\> python3 -c "print(u'[\N{EURO SIGN}]')"
[?]
En Python 3.6+, la codificación especificada por PYTHONIOENCODING
envvar se ignora para las memorias intermedias de consola interactivas a menos que PYTHONLEGACYWINDOWSIOENCODING
envvar esté configurado en una cadena no vacía.