Damian Brunold

Python Encoding von sys.stdout

2010-02-26 13:48 Programmieren, Python, Web

Ich habe soeben viel Zeit damit verbraten herauszufinden, wieso das Websystem nach der Konvertierung nach Python3 nicht mehr richtig mit Umlauten umgehen konnte.

Dass ich alle Dateioperationen mit einem Encoding versehen muss leuchtet mir ja ein. Das war auch schnell erledigt.

Aber wieso sys.stdout standardmässig im cgi-Fall mit dem Encoding ascii arbeitet ist mir schleierhaft.

Anscheinend kann man das mit der Environmentvariable LANG oder dann LC_ALL steuern. Folgende Zeilen zu Beginn des cgi-Skripts haben das Problem aber direkt gelöst.

import codecs
sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer)

Wobei das ganz klar nicht so toll ist. Schliesslich sollte ja Python3 eben OHNE das codecs Modul auskommen.

Aber eben: so klappt es und diverse Webrecherchen haben kein besseres Resultat ergeben...