Al canalizar la salida de un programa 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?
chcp 65001
antes de ejecutar su script. Esto puede tener problemas, pero a menudo ayuda, y no requiere mucho tipeo (menos de set PYTHONIOENCODING=utf_8
).
setx PYTHONENCODING utf-8
hacerlo permanente si desea guardar la escritura.