Seite 1 von 1

[bottle] Umlaute/Sonderzeichen

Verfasst: Mittwoch 28. April 2010, 18:09
von vIiRuS
Hi

Ich lasse Python aus einer sqlite Datenbank texte auslesen, die dann von Bottle verarbeitet werden. klappt soweit auch ganz gut... nur wenn ich versuche Sonderzeichen zu nutzen, will er garnicht mehr...
Ich kriege dann folgende fehlermeldung:

Code: Alles auswählen

Traceback:
Traceback (most recent call last):
  File "/usr/lib/python2.5/bottle.py", line 416, in handle
    return handler(**args)
  File "schule.py", line 31, in anzeigen
    beitrag = [tid, row[0], row[1].decode('utf-8'), row[2].decode('utf-8'), row[3]]
  File "/usr/lib/python2.5/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 101: ordinal not in range(128)
Wie man sieht funktioniert .decode() scheinbar auch nicht.... jemand ne idee wo mein fehler ist?[/code]

Verfasst: Mittwoch 28. April 2010, 18:21
von BlackJack
@vIiRuS: Was sind denn das für Daten in ``row[1]`` und ``row[2]``? Kann es sein dass die schon als `unicode` von der Datenbank geliefert werden?

Verfasst: Mittwoch 28. April 2010, 18:29
von vIiRuS
BlackJack hat geschrieben:@vIiRuS: Was sind denn das für Daten in ``row[1]`` und ``row[2]``? Kann es sein dass die schon als `unicode` von der Datenbank geliefert werden?
das ist möglich. (Der fehler sieht genau gleich aus egal ob ich das decode mit drin hab oder nicht).
hier die codestelle in der das ganze ausgelesen wird

Code: Alles auswählen

cur.execute ("""SELECT texte.Titel, texte.Text, benutzer.Name, fach.Fach FROM texte INNER JOIN benutzer ON texte.UID = benutzer.UID 
INNER JOIN fach ON fach.FID = texte.FID WHERE texte.TID = '%s';""" % tid)
row = cur.fetchone()
beitrag = [tid, row[0], row[1].decode('utf-8'), row[2].decode('utf-8'), row[3]]

Verfasst: Mittwoch 28. April 2010, 19:14
von BlackJack
@vIiRuS: An dem Quelltext kann man das nicht erkennen, Du müsstest schon tatsächlich mal nachsehen welchen Typ die Daten zur Laufzeit haben, die in `row` stecken.

Verfasst: Mittwoch 28. April 2010, 19:14
von ms4py
Versuch es mal mit `encode` ;)

Verfasst: Mittwoch 28. April 2010, 19:31
von vIiRuS
oh... *hust*.... danke. :)