Como imprimir texto codificado em UTF-8 no console em Python <3?

Estou executando um sistema Linux recente, onde todas as minhas localidades são 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=

Agora quero escrever conteúdo codificado em UTF-8 para o console.

Agora, o Python usa o UTF-8 para a codificação do FS, mas adere ao ASCII para a codificação padrão :-(

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

Eu pensei que a melhor maneira (limpa) de fazer isso eraPYTHONIOENCODING variável de ambiente. Mas parece que o Python o ignora. Pelo menos no meu sistema eu continuo recebendoascii como codificação padrão, mesmo depois de definirenvvar.

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

Se eu fizer o seguinte no início de um script, ele funcionará:

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

Mas essa abordagemparece impuro. Então, o que é uma boa maneira de conseguir isso?

Solução alternativa

Em vez de alterar a codificação padrão - que énão é uma boa ideia (veja a resposta do mesilliac) - eu apenas enroleisys.stdout com umStreamWriter como isso:

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

Vejoesta essência para uma pequena função de utilidade, que lida com isso.

questionAnswers(3)

yourAnswerToTheQuestion