#encoding utf-8 #extends templates.main_template #attr $title = "pySQLite und Umlaute (Unicode, UTF-8)" #attr $description = "Umlaute richtig in eine SQLite-Datenbank schreiben und auslesen" #attr $keywords = "Python Programmierung pysqlite SQLite Datenbank Umlaute Unicode UTF8 iso885915 ISO-8859-1 ISO-8859-15" #block rest #raw *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 #end raw #end block rest #block main_block $rest2html($rest) #end block main_block