Supposons un instant que l'on ne puisse pas utiliser print
(et donc profiter des avantages de la détection automatique d'encodage). Donc, cela nous laisse avec sys.stdout
. Cependant, sys.stdout
est tellement bête au not do any sensible encoding.Ecriture de chaînes Unicode via sys.stdout en Python
Maintenant, on lit la page wiki Python PrintFails et va essayer le code suivant:
$ python -c 'import sys, codecs, locale; print str(sys.stdout.encoding); \
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout);
Toutefois, cela ne fonctionne pas trop (au moins sur Mac). Trop voir pourquoi:
>>> import locale
>>> locale.getpreferredencoding()
'mac-roman'
>>> sys.stdout.encoding
'UTF-8'
(UTF-8 est ce que le terminal comprend).
Donc, on modifie le code ci-dessus:
$ python -c 'import sys, codecs, locale; print str(sys.stdout.encoding); \
sys.stdout = codecs.getwriter(sys.stdout.encoding)(sys.stdout);
Et maintenant les chaînes unicode sont correctement envoyés à sys.stdout
et, par conséquent imprimer correctement sur le terminal (sys.stdout
est attaché le terminal).
Est-ce la bonne façon d'écrire des chaînes Unicode dans sys.stdout
ou devrais-je faire autre chose?
EDIT: parfois - par exemple, lorsque vous redirigez la sortie less
- sys.stdout.encoding
sera None
. dans ce cas, le code ci-dessus échouera.
s/my/sa/pour la cohérence – icedwater