[Python-de] Firebird Datenbank und Umlaute

Stephan Diehl stephan.diehl at gmx.net
Di Mär 18 07:32:44 UTC 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?