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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$ cat test.py
#!/usr/bin/env python
print u'voil\xe0'
Ma langue :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$ locale
LANG=fr_FR.iso885915@euro
...
Sortie correcte dans ma fenêtre terminal courante :
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
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)
Enfin, tous les tests de conversion du type encode("ascii") se soldent par des échecs.
Il y a bien l'option "replace" (ou "ignore") qui fonctionne, mais du coup je perds les accents.

Des idées ?