Préserver l'encodage lors du transfert de la sortie en Python
Lors de la redirection de la sortie standard d'un programme Python via un canal, l'interprète peut supposer à tort qu'un encodage de None, conduisant à des erreurs d’encodage Unicode. Pour résoudre ce problème, il est essentiel de spécifier explicitement l'encodage.
Contrairement à l'exécution dans un script, où Python s'ajuste automatiquement à l'encodage du terminal, le piping nécessite un encodage manuel. Une pratique courante consiste à encoder la sortie à l'aide de « utf-8 » :
# -*- coding: utf-8 -*- print(u"åäö".encode('utf-8'))
Cela garantit que la sortie redirigée est cohérente avec la représentation Unicode, quel que soit l'encodage du programme cible.
Pour les scénarios complexes impliquant plusieurs encodages, il est recommandé de respecter le principe suivant :
Cette approche permet une manipulation transparente des données et évite les erreurs liées à l'encodage.
Prenons l'exemple d'un programme Python qui convertit entre ISO-8859-1 et UTF-8, en appliquant la conversion en majuscules dans le processus :
import sys for line in sys.stdin: line = line.decode('iso8859-1') line = line.upper() line = line.encode('utf-8') sys.stdout.write(line)
Dans ce cas, l'entrée est décodée à partir de ISO-8859-1, traitée en Unicode, puis codée en UTF-8 avant la sortie.
Définition de la valeur par défaut du système l'encodage global n'est pas conseillé, car il peut interférer avec les modules et les bibliothèques qui peuvent assumer l'encodage ASCII.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!