Cómo mostrar utf-8 en la consola de windows

Estoy usando Python 2.6 en Windows 7

Tomé prestado un código de aquí: Python, Unicode y la consola de Windows

Mi objective es poder mostrar cadenas uft-8 en la consola de Windows.

Al parecer en Python 2.6, el

sys.setdefaultencoding ()

ya no es compatible

Sin embargo, escribí reload (sys) antes de intentar usarlo y mágicamente no tuvo ningún error.

Este código NO generará errores, pero muestra caracteres divertidos en lugar de texto en japonés. Creo que el problema es porque no he cambiado con éxito la página de códigos de la consola de Windows.

Estos son mis bashs, pero no funcionan:

reload(sys) sys.setdefaultencoding('utf-8') print os.popen('chcp 65001').read() sys.stdout.encoding = 'cp65001' 

¿Quizás puedas usar win32console para cambiar la página de códigos? Intenté el código del sitio web que vinculé, pero también se produjo un error desde win32console … tal vez ese código esté obsoleto.

Aquí está mi código, que no produce errores pero imprime caracteres divertidos:

 #coding= import os import sys import codecs reload(sys) sys.setdefaultencoding('utf-8') sys.stdout = codecs.getwriter('utf8')(sys.stdout) sys.stderr = codecs.getwriter('utf8')(sys.stderr) #print os.popen('chcp 65001').read() print(sys.stdout.encoding) sys.stdout.encoding = 'cp65001' print(sys.stdout.encoding) x = raw_input('press enter to continue') a = 'こんにちは世界'#.decode('utf8') print a x = raw_input() 

Sé que declara que está utilizando Python 2.6, pero si puede usar Python 3.3, encontrará que finalmente se admite.

Use el comando chcp 65001 antes de iniciar Python.

Consulte http://docs.python.org/dev/whatsnew/3.3.html#codecs

En Python 3.6 ya no es necesario usar el comando chcp , ya que Python omite por completo la interfaz de la consola de nivel de bytes y utiliza una interfaz nativa de Unicode. Consulte PEP 528: Cambie la encoding de la consola de Windows a UTF-8 .

Como se indica en los comentarios de @ mbom007, también es importante asegurarse de que la consola esté configurada con una fuente que admita los caracteres que intenta mostrar.

Nunca jamás utilice setdefaultencoding . Si desea escribir cadenas Unicode en stdio, codifíquelas explícitamente. setdefaultencoding al setdefaultencoding con setdefaultencoding causará que los módulos stdlib y los módulos de terceros se rompan de una manera horrible y sutil al permitir la conversión implícita entre str y unicode cuando no debería suceder.

Sí, el problema es más probable que su página de códigos no esté configurada correctamente. Sin embargo, el uso de os.popen no cambiará la página de códigos; generará un nuevo shell, cambiará su página de códigos, y luego saldrá inmediatamente sin afectar en absoluto a la consola. Personalmente, no estoy muy familiarizado con Windows, por lo que no podría decirle cómo cambiar la página de códigos de su consola desde su progtwig de Python.

La forma de mostrar correctamente los datos Unicode a través de utf-8 desde python, como se mencionó anteriormente, es codificar explícitamente sus cadenas antes de imprimirlas: print s.encode('utf-8')

Cambiar la página de códigos de la consola es innecesario y no funcionará (en particular, configurarlo en 65001 se ejecuta en un error de Python ). Consulte esta pregunta para obtener más información y cómo imprimir los caracteres Unicode en la consola, independientemente de la página de códigos.

Windows no admite UTF-8 en una consola correctamente. La única forma que conozco de mostrar el japonés en la consola es cambiando (en XP) las Opciones regionales y de idioma del Panel de control, la pestaña Opciones avanzadas, Idioma para progtwigs que no son Unicode a japonés. Después de reiniciar, abra una consola y ejecute “chcp” para descubrir la página de códigos de la consola japonesa. Luego, imprima cadenas de Unicode o cadenas de bytes codificadas explícitamente en la página de códigos correcta.