2010-02-08 5 views
20

Ich habe ein Problem mit Unicode in Python. Ich kann den Ausgang Fein in einem normalen Terminal drucken, aber wenn ich stdout anderswo umleiten (oder erfassen sie mit der subprocess-Modul), erhalte ich ein UnicodeEncodeError:UnicodeEncodeError beim Umleiten von stdout

$ cat example.py 
print u'Example: \u00F1' 
$ python example.py 
Example: ñ 
$ python example.py > /dev/null 
Traceback (most recent call last): 
    File "example.py", line 1, in <module> 
    print u'Example: \u00F1' 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 9: ordinal not in range(128) 

Warum ist das? Wie kann ich es reparieren?

+1

http://stackoverflow.com/questions/492483/setting-the-correct-encoding-when-piping-stdout-in-python ist im Wesentlichen die gleiche Frage, lösten die Antworten das Problem, das ich hatte (hoffentlich). – dbr

Antwort

8

Rohre, die nicht zum Terminal führen, haben keine Codierung, daher müssen Sie sys.stdout.isatty() überprüfen und bei Bedarf codieren.

+3

Oder (noch besser) einfach immer verschlüsseln. –

+0

Weitere Informationen zum Definieren der Codierung: http://www.python.org/dev/peps/pep-0263/ –

+1

Nein, bei PEP 263 geht es um die Angabe von * source *, und es hat nichts mit Ausgabekodierungen zu tun. –

Verwandte Themen