Bonjour à tous, mon problème est assez basique, je pense.
J'ai des scripts en python2 qui, pour des raisons de compatibilité avec d'autres programmes dans la suite du processus logiciel, doivent générer des fichiers texte avec un encodage "ISO-8859-1".
Pour faire cela, tous les arguments passés aux fonctions type print et autre "sys.stderr.write" ou tostring utile la fonction "encode('iso-8859-1')".
Mais le passage à python3 interdit d'utiliser le résultat de l'appel de la fonction comme paramètre des fonctions d'écriture dans les flux de sortie/erreur.
Après quelques recherches, la maitrise de l'encodage des flux de sortie/erreur me parait maintenant très confus, avec la mise en œuvre de multiples variables d'environnement contradictoires (LANG, LC_CTYPE, etc...) et qui ne semblent pas fonctionné dans mes tests.
Pouvez-vous m'indiquer la démarche "canonique" pour que les flux de sortie/erreurs de mes scripts Python3 soient encodés en "ISO-8859-1" ?
Merci,
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Même en utilisant cette fonction "sys.stdout.reconfigure(encoding='iso-8859-1')" en début de script, la sortie standard de ce script est récupérée dans une variable shell puis envoyée en ligne de commande d'un autre script python3, et cette donnée est toujours "non conforme".
Et dans le script en aval, j'ai une erreur car ce que j'ai en entré contient "\udce9" (un é codé selon quelque chose que je ne maitrise pas) que "encode('cp1252')" ou ".encode('iso-8859-1')" ne comprennent pas => erreurs).
Est-ce le passage par une variable d’environnement ou de la concaténation de chaine dans le script Shell qui posent problèmes ?
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Si on bricole l'encoding, c'est d'abord pour avoir un affichage correct çàd l'humain voit le bon caractère accentué. Après si la chaine de caratères doit être transportée d'un programme à l'autre via... pas besoin d'encoder: on reste en binaire tant qu'on n'a pas besoin d'afficher.
En effet, à chaque encode/décode, on va avoir des soucis potentiels/réels à résoudre.
Vous avez donc 2 options: attendre que quelqu'un ait une idée magique ou revoir les échanges de données entre vos programmes (pour les rendre plus robustes).
Pour écrire dans des fichiers avec un encodage spécifique, ouvrez simplement le fichier avec l'encodage désiré en utilisant l'argument encoding de la fonction open
with open('fichier_sortie.txt', 'w', encoding='iso-8859-1') as f:
f.write("Quelque chose en ISO-8859-1")
Cette méthode garantit que tout ce qui est écrit dans le fichier utilise l'encodage "ISO-8859-1".
Les variables d'environnement comme LANG et LC_CTYPE peuvent influencer l'encodage par défaut de Python, mais leur gestion peut être complexe et varier selon les systèmes d'exploitation. La méthode canonique recommandée pour contrôler l'encodage dans vos scripts Python est de le faire explicitement dans votre code, comme montré ci-dessus, plutôt que de compter sur ces variables d'environnement.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Il y en a d'autres... après, laquelle sera la plus facile/adaptée à votre contexte?
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)