[Fwd: Re: [Python-de] Umlaute in Python]
Stefan Schwarzer
sschwarzer at sschwarzer.net
Sam Jun 4 11:14:21 CEST 2005
Hallo Volker,
On 2005-06-04 01:13, Volker Helm wrote:
> Am besten findest du erst einmal heraus, mit welchen Zeichensatz die
> Datenbank arbeitet. Ich stelle langsam alle auf UTF-8 um.
ich halte das für die meisten Fälle für eine gute Idee.
>>>gibt es eine generelle Möglichkeit Python Umlautefähig zu machen? bzw
>>>das Encoding anzupassen?!
>
> Entsprechend dem Zeichensatz kannst du in der obersten Programmzeile
> definieren, mit welchen Zeichensatz du arbeiten willst. Daran solltest
> du dich halten und gegebenenfalls den Editor einstellen.
>
> # -*- coding: iso-8859-15 -*- entspricht latin-9
> # -*- coding: iso-8859-1 -*- entspricht latin-1
> # -*- coding: utf-8 -*- entspricht unicode
Vorsicht, diese Zeile sagen nur etwas darüber aus, in welchem Encoding
der jeweilige Python-Quelltext ist. Wie evtl. Strings (str), die im
Programm verwendet werden, kodiert sind, ist eine andere Geschichte.
Wenn die Datenbank die Strings in UTF-8 enthält und der Datenbankadapter
diese einfach nur als Python-Strings (str) durchreicht, sind sie UTF-8-
kodiert. Daraus kann man mit
unicode_string = unicode(utf8_string, "utf-8")
einen Unicode-String (Python-Typ unicode) machen. Etwas mehr,
diesmal mit Latin1-Encoding, weil ich das direkt eingeben kann:
>>> us = unicode("äöü", "latin1")
>>> us
u'\xe4\xf6\xfc'
>>> print us
Traceback (most recent call last):
File "<stdin>", line 1, in ?
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
>>> print us.encode("latin1")
äöü
Es gibt auch Datenbankadapter, die direkt unicode-Objekte liefern (und
hoffentlich auch richtig funktionieren, wenn die Strings in der
Datenbank z. B. als Latin1 gespeichert sind).
Ein bisschen Hintergrund-Info zum Thema Unicode und Encodings:
http://p-nand-q.com/python/unicode_faq.html
Viele Grüße
Stefan