Establecer la codificación correcta al canalizar stdout en Python

Al canalizar la salida de un programa de Python, el intérprete de Python se confunde acerca de la codificación y lo establece en Ninguno. Esto significa un programa como este:

# -*- coding: utf-8 -*-
print u"åäö"

funcionará bien cuando se ejecute normalmente, pero fallará con:

UnicodeEncodeError: el códec 'ascii' no puede codificar el carácter u '\ xa0' en la posición 0: el ordinal no está en el rango (128)

cuando se usa en una secuencia de tubería.

¿Cuál es la mejor manera de hacer que esto funcione al instalar tuberías? ¿Puedo decirle que use cualquier codificación del shell / sistema de archivos / lo que sea que esté usando?

Las sugerencias que he visto hasta ahora es modificar su site.py directamente, o codificar la codificación predeterminada utilizando este truco:

# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print u"åäö"

¿Hay una mejor manera de hacer que la tubería funcione?

Respuestas a la pregunta(10)

Su respuesta a la pregunta