nachdem ich es jetzt 2 Stunden mit Error-And-Trial sowie dem guten alten google versucht habe, hiermal ein Problem, welches bestimmt blos eine Kleinigkeit ist


Problem:
Meine CherryPy Anwendung liefert alle Seiten als UTF-8 aus, das ist auch so gewollt und per Content-Type so eingestellt.
Nun bekommt der Client ein Formular, alles funktioniert wie es soll, aber:
Wenn ein Umlaut, bzw. nicht ASCII-Zeichen in einem Textfeld vorkommt, wird dies bei der Anzeige falsch dargestellt, also z.B. in der Quelltextansicht als dieses ?-Zeichen mit der Box außen rum. Ich vermute er kann das Zeichen irgendwo nicht finden.
Diagnose:
Ich habe die betroffene Seite mal mit wget/curl runtergeladen, und mit vim angesehen -> Filetype ist ISO-8859-1, sollte aber UTF-8 sein. Auch file auf der Konsole bestätigt das, mit ":set fileencoding=utf-8" kann ich die Datei auch nach UTF-8 umwandeln, under Browser zeigt diese dann auch richtig an.
Vermutung:
Meine Datenbankabfrage schiebt die Daten per cursor.execute() direkt in die Datenbank, also so wie es vom Client kommt, natürlich mit Escaping wegen SQL-Injection und co, aber sonst wird nix gemacht.
Bei der Ausgabe wird nicht konvertiert, und so kommt der ISO-8859-1 Bytestring in den Unicode Output der zum Browser geht, und peng haben wir mein Problem.
Aber: Wie Löse ich das Problem? Ich glaube zu wissen woran es liegt, aber ich finde beim besten willen keine Lösung, was ich schon versucht habe:
string.encode("utf-8") -> UnicodeDecodeError (der Klassiker, wenn es um Kodierungen geht)
Content-Type auf ISO-8859-1 -> Betroffener Text ist nun richtig, aber halt dafür der UTF-8 Teil falsch *arg*
Am liebsten wäre es mir wenn ich die Daten direkt als "richtiges" UTF-8 in der Datenbank hätte, dann hätte alles (Templates, Content-Type usw...) UTF-8, und ich muss nur einmal konvertieren, und nicht bei jeder Page-Impression...
mfg Betz Stefan
PS: Hoffentlich konnte mir jetzt dabei jemand folgen....
PPS: Die entsprechenden Code-Teile könnte ich liefern wenn benötigt!