pySQLite und Umlaute (Unicode, UTF-8)

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

pySQLite und Umlaute (Unicode, UTF-8)

Beitragvon gerold » Dienstag 25. Juli 2006, 23:02

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder