Как напечатать текст в кодировке 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)
Увидетьэтот смысл для небольшой функции полезности, которая обрабатывает это.