Wie drucke ich in Python <3 UTF-8-kodierten Text auf die Konsole?

Ich verwende ein aktuelles Linux-System, bei dem alle meine Ländereinstellungen UTF-8 sind:

LANG=de_DE.UTF-8
LANGUAGE=
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
...
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=

Jetzt möchte ich UTF-8-codierten Inhalt in die Konsole schreiben.

Im Moment verwendet Python UTF-8 für die FS-Codierung, bleibt jedoch bei ASCII für die Standardcodierung :-(

>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> sys.getfilesystemencoding()
'UTF-8'

Ich dachte, der beste (saubere) Weg, dies zu tun, war das Einstellen derPYTHONIOENCODING Umgebungsvariable. Aber es scheint, dass Python es ignoriert. Zumindest auf meinem System bekomme ich immerascii als Standardkodierung, auch nach dem Einstellen derenvvar.

# tried this in ~/.bashrc and ~/.profile (also sourced them)
# and on the commandline before running python
export PYTHONIOENCODING=UTF-8

Wenn ich zu Beginn eines Skripts Folgendes mache, funktioniert es trotzdem:

>>> import sys
>>> reload(sys)  # to enable `setdefaultencoding` again
<module 'sys' (built-in)>
>>> sys.setdefaultencoding("UTF-8")
>>> sys.getdefaultencoding()
'UTF-8'

Aber dieser Ansatzscheint unsauber. Was ist also ein guter Weg, um dies zu erreichen?

Umgehung

Anstatt die Standardkodierung zu ändern - das istkeine gute Idee (Siehe die Antwort von Mesilliac.) - Ich wickle nursys.stdout mit einerStreamWriter so was:

sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout)

Sehendieser Kern für eine kleine Utility-Funktion, die damit umgeht.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage