Jak wydrukować tekst zakodowany w UTF-8 na konsoli w Pythonie <3?

Używam najnowszego systemu Linux, gdzie wszystkie moje ustawienia narodowe to UTF-8:

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=

Teraz chcę napisać zawartość zakodowaną w UTF-8 do konsoli.

W tej chwili Python używa UTF-8 do kodowania FS, ale trzyma się ASCII dla domyślnego kodowania :-(

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

Myślałem, że najlepszym (czystym) sposobem na to było ustawieniePYTHONIOENCODING Zmienna środowiskowa. Ale wydaje się, że Python go ignoruje. Przynajmniej w moim systemie wciąż się dostajęascii jako domyślne kodowanie, nawet po ustawieniuenvvar.

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

Jeśli na początku skryptu wykonam następujące czynności, działa to jednak:

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

Ale to podejściewydaje się nieczysty. Więc jaki jest dobry sposób, aby to osiągnąć?

Obejście problemu

Zamiast zmieniać domyślne kodowanie - czyliniezbyt dobry pomysł (patrz odpowiedź mesilliaca) - po prostu zawijamsys.stdout zStreamWriter lubię to:

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

Widziećten sens dla małej funkcji użyteczności, która to obsługuje.

questionAnswers(3)

yourAnswerToTheQuestion