J'ai vu des quantités de pages sur le sujet, mais aucune traitant de mon problème en particulier.
Un print correct dans ma fenêtre terminal sort en erreur lorsque je redirige la sortie dans un fichier.
J'ai vu des tonnes d'exemples avec un encoding en UTF8, mais pour toutes sortes de raisons je souhaite rester en ISO-8859.
Ma seconde contrainte est que, dans la pratique, je récupère des chaînes codées en unicode à travers une API.
Je ne suis donc pas maître de l'encodage d'origine.
Exemple trivial :
Ma langue :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $ cat test.py #!/usr/bin/env python print u'voil\xe0'
Sortie correcte dans ma fenêtre terminal courante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $ locale LANG=fr_FR.iso885915@euro ...
Et maintenant la même chose en redirigeant la sortie dans un fichier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $ ./test.py voilà
Enfin, tous les tests de conversion du type encode("ascii") se soldent par des échecs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $ ./test.py > xxx Traceback (most recent call last): File "./test.py", line 3, in <module> print u'voil\xe0' UnicodeEncodeError: 'ascii' codec can't encode character u'\xe0' in position 4: ordinal not in range(128)
Il y a bien l'option "replace" (ou "ignore") qui fonctionne, mais du coup je perds les accents.
Des idées ?
Partager