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

"Martin v. Löwis" martin at v.loewis.de
Son Sep 10 11:14:09 CEST 2006


Alexander 'boesi' Bösecke schrieb:
>> Das Problem ist, dass im Fall von pythonw.exe das Encoding nicht gesetzt
>> wird (siehe Nachricht von Martin v. Löwis), also wird zur Ausgabe der
>> ASCII-Codec verwendet.
> 
> Aber ist das nicht irgendwie schizophren - erst wird das Encoding
> weggeworfen (oder halt nicht gesetzt) und dann wird ein Traceback (wegen
> falschem Encoding) ins nirgendwo geschickt?

Das encoding von sys.stdout wird deshalb nicht gesetzt, weil kein
sinnvoller Wert dafür ermittelt werden kann. Der Traceback wird ganz
normal auf den STDOUT-Handle des Betriebssystems ausgegeben. In einer
Windows-Anwendung ist es dann Windows, was die Ausgabe verwirft.

> Wenn der print-Befehl schon
> ausgeführt wird, sollten dann diese EncodeErrors nicht ignoriert werden?
> Oder überseh ich jetzt irgendwas?

Dieses Argument verstehe ich nicht. Fehler sollten nie ignoriert werden,
es sei denn, die Anwendung ignoriert sie explizit (siehe auch den
Zen von Python).

> So what is it? Bug or feature?

Es ist m.E. ein Bug, dass in pythonw sys.stdout.encoding nicht
gesetzt ist. Allerdings kann ich mir keine vernünftige Codeänderung
vorstellen, die diesen Bug behebt. Patches sind herzlich willkommen.

Man müsste erkennen, dass Windows stdout "ins nichts" leitet,
und könnte dann gefahrlos encoding auf "UTF-8" setzen. Ich weiß
aber keine Win32-API-Rufe, mit denen man erkennen kann, dass
der stdout-Filehandle ins nichts geht.

Ciao,
Martin



More information about the python-de mailing list