Wenn die Ausgabe eines Python-Programms weitergeleitet wird, ist der Python-Interpreter verwirrt über die Codierung und setzt sie auf Keine. Dies bedeutet ein Programm wie dieses:
# -*- coding: utf-8 -*-
print u"åäö"
funktioniert bei normaler Ausführung einwandfrei, schlägt jedoch fehl mit:
UnicodeEncodeError: Der Codec 'ascii' kann das Zeichen u '\ xa0' an Position 0 nicht codieren: Ordnungszahl nicht im Bereich (128)
bei Verwendung in einer Rohrfolge.
Was ist der beste Weg, um diese Arbeit beim Verrohren zu machen? Kann ich ihm einfach sagen, dass er die Codierung verwenden soll, die die Shell / das Dateisystem / was auch immer verwendet?
Die Vorschläge, die ich bisher gesehen habe, sind, Ihre site.py direkt zu ändern oder die Defaultencodierung mit diesem Hack fest zu codieren:
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print u"åäö"
Gibt es einen besseren Weg, um Rohrleitungen zum Laufen zu bringen?
chcp 65001
bevor Sie Ihr Skript ausführen. Dies kann Probleme haben, hilft aber oft und erfordert nicht viel Tippen (weniger als set PYTHONIOENCODING=utf_8
).
setx PYTHONENCODING utf-8
, es dauerhaft zu machen, wenn Sie die Eingabe speichern möchten.