Как напечатать текст в кодировке UTF-8 на консоли в Python <3?

Я использую новейшую систему Linux, где все мои локали - 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=

Now I want to write UTF-8 encoded content to the console.

Прямо сейчас Python использует UTF-8 для кодировки FS, но придерживается ASCII для кодировки по умолчанию :-(

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

Я думал, что лучший (чистый) способ сделать это - установитьPYTHONIOENCODING переменная окружения. Но похоже, что Python игнорирует это. По крайней мере, в моей системе я продолжаю получатьascii в качестве кодировки по умолчанию, даже после установкиenvvar.

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

Если я делаю следующее в начале скрипта, он работает, хотя:

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

Но этот подходseems unclean, Итак, каков хороший способ сделать это?

Workaround

Вместо изменения кодировки по умолчанию - котораяnot a good idea (см. ответ мезиллака) - Я просто завернуsys.stdout сStreamWriter как это:

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

Увидетьэтот смысл для небольшой функции полезности, которая обрабатывает это.

Ответы на вопрос(3)

Ваш ответ на вопрос