15 votes

Comment afficher l'utf-8 dans la console Windows

J'utilise Python 2.6 sous Windows 7.

J'ai emprunté un peu de code ici : Python, Unicode et la console Windows

Mon objectif est de pouvoir afficher des chaînes de caractères uft-8 dans la console Windows.

Apparemment, dans python 2.6, la fonction

sys.setdefaultencoding()

n'est plus pris en charge

Cependant, j'ai écrit reload(sys) avant d'essayer de l'utiliser et, comme par magie, il n'y a pas eu d'erreur.

Ce code ne provoque PAS d'erreur, mais il affiche des caractères amusants à la place du texte japonais. Je pense que le problème vient du fait que je n'ai pas réussi à changer la page de code de la console Windows.

Ce sont mes tentatives, mais elles ne fonctionnent pas :

reload(sys)
sys.setdefaultencoding('utf-8')

print os.popen('chcp 65001').read()

sys.stdout.encoding = 'cp65001'

Peut-être pouvez-vous utiliser win32console pour changer la page de code ? J'ai essayé le code du site que j'ai cité en lien, mais il a également erré à partir de la win32console peut-être que ce code est obsolète.

Voici mon code, qui ne provoque pas d'erreur mais imprime des caractères bizarres :

#coding=<utf8>
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()

15voto

Mark Ransom Points 132545

Je sais que vous avez déclaré utiliser Python 2.6, mais si vous êtes en mesure d'utiliser Python 3.3, vous constaterez que cette fonctionnalité est enfin prise en charge.

Utilisez la commande chcp 65001 avant de lancer Python.

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

Dans Python 3.6, il n'est même plus nécessaire d'utiliser l'option chcp puisque Python contourne entièrement l'interface de la console au niveau de l'octet et utilise à la place une interface native Unicode. Voir PEP 528 : Modification de l'encodage de la console Windows en UTF-8 .

Comme indiqué dans les commentaires de @mbom007, il est également important de s'assurer que la console est configurée avec une police qui prend en charge les caractères que vous essayez d'afficher.

10voto

habnabit Points 4245

Jamais toujours toujours utilice setdefaultencoding . Si vous voulez écrire des chaînes unicode sur stdio, encodez-les explicitement. En jouant avec setdefaultencoding va provoquer des ruptures dans les modules stdlib et les modules tiers de manière horriblement subtile en autorisant la conversion implicite entre str y unicode lorsque cela ne devrait pas se produire.

Oui, le problème vient probablement du fait que votre page de code n'est pas correctement paramétrée. Cependant, l'utilisation de os.popen ne modifiera pas la page de code ; elle créera un nouveau shell, modifiera le code de la son et quittez immédiatement la page sans affecter votre console. Personnellement, je ne suis pas très familier avec Windows, donc je ne pourrais pas vous dire comment changer la page de code de votre console à partir de votre programme python.

La façon d'afficher correctement des données unicode via utf-8 à partir de python, comme mentionné précédemment, est d'encoder explicitement vos chaînes de caractères avant de les imprimer : print s.encode('utf-8')

6voto

Daira Hopwood Points 687

Changer la page de code de la console est à la fois inutile et ne fonctionnera pas (en particulier, en la fixant à 65001, on se heurte à une erreur d'interprétation de la page de code de la console). Bogue Python ). Voir aussi cette question pour plus de détails, et pour savoir comment imprimer des caractères Unicode sur la console, quelle que soit la page de code.

3voto

Mark Tolonen Points 32702

Windows ne supporte pas correctement l'UTF-8 dans une console. Le seul moyen que je connaisse pour afficher le japonais dans la console est de changer (sous XP) les Options régionales et linguistiques du Panneau de configuration, l'onglet Avancé, la Langue pour les programmes non-Unicode en japonais. Après le redémarrage, ouvrez une console et exécutez "chcp" pour connaître la page de code de la console japonaise. Ensuite, imprimez les chaînes Unicode ou les chaînes d'octets explicitement encodées dans la bonne page de code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X