[Python-de] korrekte Darstellung der Umlaute

Michael Ströder michael at stroeder.com
Do Apr 5 13:17:30 CEST 2012


Michael Weber wrote:
> 
>> Alles klar?
> 
> Verstanden habe ich es halbwegs. Mich irritiert jetzt nur, in wie weit ich
> jetzt erreiche, dass anstatt der UTF-8-Codierung das eigentliche leserliche
> Zeichen in der Variable steht.

"Lesbar" ist halt abhängig vom Ausgabegerät und vom Leser. ;-)

"\xc3\xb6t\xc2\xb0\xc3\x84" ist in Python 2.x ein für Python lesbarer
Byte-String. Sonst nix.

Konvertierst Du den mit Deinem A-priori-Wissen bzgl. verwendetem Character
Encoding mittels "\xc3\xb6t\xc2\xb0\xc3\x84".decode('utf-8') in die
Unicode-Zeichenkette u'\xf6t\xb0\xc4', so kann der Python-Interpreter auch
dies "lesen", aber Du als Mensch wahrscheinlich nicht. Du bedienst Dich also
eines Ausgabegeräts, welches auch immer das ist - z.B. eine Linux-Shell mit
LANG=en_US.UTF-8 o.ä.

Kurz gefasst: Du solltest alles was irgendwie Text ist, als Unicode-Strings
und nicht als bereits UTF-8-enkodierten Byte-Buffer in Deiner Applikation
rumreichen und verarbeiten. Erst bei I/O musst Du .decode() oder .encode() mit
dem dann benötigten Character Encoding machen. I/O kann auch schon der Aufruf
eines Moduls sein, welches nur Byte-Buffer (mit definiertem Encoding) entgegen
nimmt.

Ausnahme: Echte Binärdaten wie JPEG-Photos etc. müssen natürlich auch in einer
Anwendung als Byte-Buffer durchgereicht werden.

Schwierigkeiten ergeben sich grundsätzlich bei historisch gewachsener Software
wo intern u.U. auch ein Mix hin- und hergeschoben wird.

Ciao, Michael.


Mehr Informationen über die Mailingliste python-de