Beim Portieren von Code aus Python 2 nach Python 3, stoße ich auf dieses Problem beim Lesen von UTF-8-Text von der Standardeingabe. In Python 2, das funktioniert gut:Python 3: Wie stdin codieren
for line in sys.stdin:
...
Aber Python 3 erwartet ASCII von sys.stdin, und wenn es nicht-ASCII-Zeichen in der Eingabe ist, erhalte ich die Fehlermeldung:
UnicodeDecodeError: 'ascii' codec can't decode byte .. in position ..: ordinal not in range(128)
für eine normale Datei, würde ich die Codierung angeben, wenn Sie die Datei öffnen:
with open('filename', 'r', encoding='utf-8') as file:
for line in file:
...
Aber wie kann ich die Codierung für Standardeingabe angeben? Andere haben SO Beiträge vorgeschlagen
input_stream = codecs.getreader('utf-8')(sys.stdin)
for line in input_stream:
...
jedoch verwenden, das funktioniert nicht in Python 3. Ich immer noch die gleiche Fehlermeldung. Ich benutze Ubuntu 12.04.2 und mein Gebietsschema ist auf en_US.UTF-8 eingestellt.
Danke, das hat den Trick gemacht! –
Was ist die nächste Entsprechung für Python2.6? – bukzor
@bukzor: Nächste Option: Öffnen Sie den Dateideskriptor direkt mit 'io.open()'; '0' ist' stdin': 'io.open (0)' gibt ein 'TextIOWrapper()' -Objekt zurück. –