[Fwd: Re: [Python-de] Umlaute in Python]
![](https://secure.gravatar.com/avatar/afe0b6c1ccedcf158119c83034778922.jpg?s=120&d=mm&r=g)
Hi,
ich habe grade eine SQL Abfrage erstellt die Umlaut ebeinhaltet. Die Abfrage läuft zwar generell durch aber am Anfang des Scripts erhalte ich einen Fehler
"Non ASCII Character"
Am besten findest du erst einmal heraus, mit welchen Zeichensatz die Datenbank arbeitet. Ich stelle langsam alle auf UTF-8 um.
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 Die rechten Werte entsprechen dem Zeichensatz unter PostgreSQL. Viel Vergnügen, Volker _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
![](https://secure.gravatar.com/avatar/e2835572a191d5a492cded3c0c6d17b3.jpg?s=120&d=mm&r=g)
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 _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (2)
-
Stefan Schwarzer
-
Volker Helm