[Python-de] Firebird Datenbank und Umlaute
Stephan Diehl
stephan.diehl at gmx.net
Di Mär 18 08:32:44 CET 2008
Hallo Uwe,
Am Dienstag, 18. März 2008 07:57:36 schrieb Uwe Wilske:
> Hallo,
>
> seit den Chemnitzer Linuxtagen 2008 schaue ich mir Python genauer an.
> Jetzt habe ich ähnliche Probleme, wie im Thread "xml mit Umlauten parsen"
>
> Aus der Firebird Datenbank, die mit dem "Characterset ISO8859_1"
> erstellt wurde, möchte ich strings mit Umlauten auslesen.
>
> def list_Adr(self):
> dt_Adr = self.con.cursor()
> dt_Adr.execute("SELECT ID,KURZ FROM KO_ADR ORDER BY KURZ")
> rows = dt_Adr.fetchall()
> for row in rows:
> s = u""
> s = "%3i %s" % (row[0], row[1])
das verwandelt 's' nicht magischerweise in einen unicode string.
Wenn du weisst, dass deine Datenbank iso-8859-1 kodierte Strings zurueckgibt,
kannst du z.B. sowas machen:
s = unicode("%3i %s" % (row[0], row[1]), 'iso-8859-1')
oder du schaust mal, ob deine db Anbindung dazu gebracht werden kann, gleich
unicode zurueckzugeben.
>
> #dass funktioniert, zeigt aber die Umlaute falsch an
> print s
>
> #das bringt bei Umlauten einen Fehler
> print s.encode("ISO-8859-1")
>
> 199 Geb�udereinigung GmbH
> Traceback (most recent call last):
> File "./python/wnfDesktopkalender/wnf_fib.py", line 50, in <module>
> db.list_Adr()
> File "./python/wnfDesktopkalender/wnf_fib.py", line 41, in list_Adr
> print s.encode("ISO-8859-1")
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 14:
> ordinal not in range(128)
>
> Was mache ich falsch?
Mehr Informationen über die Mailingliste python-de