2

Je rencontre des problèmes avec l'encodage python. Lorsque je tente d'exécuter ceci:Sous-processus Python check_output décodage des caractères spéciaux

subprocess.check_output("ipconfig", shell=True) 

il me donne une sortie avec des caractères spéciaux en elle, comme:

"Statut du m\x82dia" 
"M\x82dia d\x82connect\x82" 

(je suis français)

Lorsque je tente le décodage avec un .decode() à la fin, il me donne cette erreur:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 78: invalid start byte 

J'ai essayé d'utiliser .decode("utf-8"), j'ai joué avec l'encodage et le décodage pendant des heures, et je ne trouve pas la réponse. Tout ce que j'ai regardé sur internet n'a pas fonctionné. Peut-être que je suis juste idiot, mais bon. Que puis-je faire pour me débarrasser de ces erreurs de décodage et imprimer mes caractères spéciaux?

Merci.

+0

https://stackoverflow.com/questions/9941064/subprocess-popen-with-a-unicode-path https://bugs.python.org/issue27179 –

+2

Vous pouvez le réparer en ajoutant 'encoding =" 437 " 'ou' encoding = "850" 'aux arguments, mais je ne serais pas content avec cette réponse car elle n'explique pas pourquoi la page de codes est ce qu'elle est. –

+0

@JoshLee Oh mec, avec '.decode (sys.stdout.encoding)' ça marche comme un charme! Merci mec! Pourriez-vous faire de votre réponse une réponse «officielle» ou quelque chose, pour que je puisse la valider? Merci encore, tu as fait ma journée, ça fait longtemps que je suis coincé avec ça ^^ " – Alpha

Répondre

2

Vous appelez la commande via CMD, qui possède un mode Unicode et un mode ANSI. Le "correct" moyen est d'invoquer le mode Unicode, mais vous pouvez ajouter encoding="437" ou encoding="850" à l'appel de sous-processus pour le faire fonctionner. Cela dépend de votre connaissance de la page de codes actuelle.