[Python-de] print von Nicht-ASCII-Zeichen

Diez B. Roggisch deets at web.de
Mon Aug 28 17:41:28 CEST 2006


>
> Dann hast du die erste Zeile des Programms entfernt oder benutzt ein
> uraltes Python. Offensichtlich denkt dein Python naemlich der Quellcode
> waere in ascii, ist er aber nicht, was auch mit der Zeile
>
> # -*- coding: utf_8 -*-
>
> angegeben wird. Hier mit python2.4 funktioniert das wunderbar, sowohl
> mit UTF-8 als auch Latin1 Umgebung.

Das stimmt nicht. Diese Deklaration fuehrt einzig und alleine dazu, das 
unicode-literale mit dem entsprechenden encoding ausgewerted werden & dann zu 
unicode gewandelt.

Alexanders Problem hingegen haengt mit der Wandlung eines unicode-strings zu 
eineim byte-string fuer die Ausgabe zusammen.

Ich weiss nicht genau, wie python dazu kommt ein encoding an sys.stdout zu 
pappen - und es kann sein, das dies unter bestimmten Umstaenden eben nicht 
geht.

Was aber auf jeden Fall klappen sollte: sys.stdout durch einen encoding-stream 
aus dem codecs modul zu ersetzen. Dann sollte das unter allen Umstaenden 
gehen.

Also etwa so in der Art:

sys.stdout = codecs.EncodedFile(sys.stdout, data_encoding="utf-8", 
errors="foo")

Das foo ist natuerlich unsinn - aber ich finde im Moment nicht die moeglichen 
Werte ausser dem default strict - welcher an dieser Stelle fuer 
debugging-Zwecke vielleicht duerch eine relaxtere Variante ersezts werden 
sollte.

Diez



More information about the python-de mailing list