[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