La impresión de caracteres Unicode a la salida estándar en Python imprime glifos incorrectos

Quiero imprimir un conjunto de caracteres Unicode en mi terminal de línea de comandos. Incluso cuando hago cumplir la encoding para que sea “UTF-8”, el terminal imprime algo de basura.

$python -c "import sys; print sys.stdout.write(u'\u2044'.encode('UTF-8'))" ΓüäNone $python -c "import sys; print sys.stdout.encoding" cp437 

Mi encoding de terminal predeterminada es cp437 y estoy intentando anular eso. La salida esperada aquí es barra de fracción (⁄)

http://www.fileformat.info/info/unicode/char/2044/index.htm

El mismo fragmento de código funciona perfectamente en mi terminal Mac y utiliza UTF-8 como encoding predeterminada. ¿Hay alguna manera de mostrar esto en Windows también? La fuente que uso en el símbolo del sistema de Windows es consolas.

Quiero que mi código funcione con cualquier carácter Unicode, no solo este ejemplo particular, ya que la entrada es un resultado de la consulta web y no tengo control sobre él.

Debe utilizar una página de códigos UTF-8 (cp65001) para esperar que se muestre el texto codificado en UTF-8.

Python 3.3 afirma ser compatible con la página de códigos 65001 (UTF-8) en Windows.

 C:\>chcp 65001 Active code page: 65001 C:\>python Python 3.3.0rc1 (v3.3.0rc1:8bb5c7bc46ba, Aug 25 2012, 13:50:30) [MSC v.1600 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> print('\u2044') ⁄ 

Aunque es buggy:

 >>> print('\u2044') ⁄ >>> print('\u2044'*8) ⁄⁄⁄⁄⁄⁄⁄⁄   ⁄⁄⁄⁄ ⁄⁄    >>> print('1\u20442 2\u20443 4\u20445') 1⁄2 2⁄3 4⁄5 ⁄5 

Python no puede controlar la encoding utilizada por su terminal; Tendrás que cambiar eso en otro lugar.

En otras palabras, solo porque obliga a Python a enviar texto codificado en UTF-8 al terminal, no significa que su terminal mágicamente comenzará a aceptar esa salida también como UTF-8.

El terminal de Mac OS X ya se ha configurado para funcionar con UTF-8.

En Windows, puede cambiar la página de códigos de la consola con el comando chcp :

 chcp 65001 

donde 65001 es la página de códigos de Windows para UTF-8. Ver caracteres Unicode en la línea de comandos de Windows – ¿cómo?