Problem bei Ausgabe von Unicode-Strings

22/09/2014 - 12:56 von Harald Wenninger | Report spam
Hallo zusammen,

ich habe ein Problemchen bei der Ausgabe von Unicode-Strings.

folgendes Progràmmchen:
#!/usr/bin/python2.7
# encoding: utf-8

print u'à'

funktioniert wunderbar, wenn es einfach so aufgerufen wird:
$ ./test.py
à
$

tut aber nicht mehr, wenn man die Ausgabe umleitet:
$ ./test.py > test.txt
Traceback (most recent call last):
File "./test.py", line 4, in <module>
print u'à'
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 0: ordinal not in range(128)
$

Das print-Statement scheint Probleme zu haben, einen Unicode-String
korrekt auszugeben. Wie schaffe ich das?

Gruß,
Harald
 

Lesen sie die antworten

#1 Christopher Arndt
22/09/2014 - 13:09 | Warnen spam
Am 22.09.2014 um 12:56 schrieb Harald Wenninger:
Das print-Statement scheint Probleme zu haben, einen Unicode-String
korrekt auszugeben. Wie schaffe ich das?



Bei der Ausgabe eines Unicode-Strings auf die Konsole oder ein File muss
dieser zunàchst in einen kodierten Binary-String (in Python2: str, in
Python 3: byte) umgewandelt werden. Falls du den Unicode-String nicht
selbst enkodierst (wobei du dann ein passendes Encoding angeben kannst),
geschieht dies implizit. Dabei wird dann das für den Ausgabestream
eingestellte (oder Default) Encoding verwendet.

In ersten Fall kann Python das Encoding der Konsole feststellen (über
die TERM Umgebungsvariable), im zweiten Fall nicht, denn der
Ausgabestream ist ja keine Konsole, sondern ein File. Also verwendet
Python als Default ASCII, was natürlich nicht klappt, weil 'à' darin
nicht vorkommt.

Lösung: an den Input/Output-Boundaries immer eingehende Daten explizit
nach Unicode dekodieren und auszugebende Strings explizit kodieren (z.B.
nach UTF-8 oder den User das Encoding setzen lassen).


Chris

Ähnliche fragen