pySQLite und Umlaute (Unicode, UTF-8)

Gute Links und Tutorials könnt ihr hier posten.
Antworten
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

http://gelb.bcom.at/trac/misc/wiki/Tuto ... iteUmlaute

Code: Alles auswählen

######################################
pySQLite und Umlaute (Unicode, UTF-8)
######################################

*SQLite* ist eine recht feine Datenbank. Und wenn man weiß, wie man Umlaute
in die Datenbank bekommt und diese auch wieder so raus kriegt, wie man
sie haben möchte, dann ist *pySQLite* gleich noch ein wenig 
sympathischer. ;-) Dieses Tutorial trägt hoffentlich positiv dazu bei.

*SQLite* speichert intern alles im ``UTF-8``-Format ab. Es gibt aber 
einen Unterschied zwischen *SQLite* der Datenbank und *pySQLite*
der Datenbankschnittstelle. *SQLite* arbeitet standardmäßig mit ``UTF-8``. 
*pySQLite*, in den neueren Versionen, erwartet ``UTF-8`` oder ``UNICODE``
und gibt immer ``UNICODE`` zurück (oder versucht es zumindest).

Meine Tests mit *pySQLite* Version 2.3.2 haben ergeben, dass es egal
ist, ob man *pySQLite* mit einem ``UTF-8``-String oder mit einem 
``UNICODE``-String füttert. Einen ``UTF-8``-String muss *pySQLite*
nicht mehr nach ``UTF-8`` umwandeln. Das ist der einzige Unterschied.

Füttert man *pySQLite* aber mit einem anders kodierten String, der
noch dazu ein Sonderzeichen oder ein Umlaut enthält, dann bekommt 
man spätestens dann einen Fehler zurück, wenn man versucht diesen 
String wieder aus der Datenbank auszulesen. *pySQLite* versucht
uns wieder einen UNICODE-String zurück zu geben. Bei diesem 
Umwandlungsversuch wird ein Fehler ausgelöst, da *pySQLite* es nicht
schafft, diesen String nach UNICODE umzuwandeln. Es geht einfach 
davon aus, dass auch wirklich UTF-8 in der Datenbank steht.

Eine saubere Sache :-) ::

  UNICODE --> pySQLite --> UNICODE

Etwas schneller, wenn alle Daten bereits im ``UTF-8``-Format vorliegen :-) ::

  UTF-8 --> pySQLite --> UNICODE

Das funktioniert nicht, wenn Sonderzeichen oder Umlaute im String enthalten sind :-( ::

  LATIN1 --> pySQLite --> UNICODE
lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten