Hallo,
ich habe mit PloneFormGen ein wunderbares Formular erstellt, dieses speichert die Eingaben in meinen Contenttyp.
Diesen will ich jetzt über eine XML-Ansicht ausgeben, allerdings kommen bei Umlauten teilweise Unicode zurück.
Wie kann ich diesen wieder in lesbare Zeichen umwandenl??
Es funktionieren nur MehrfachAuswahllisten nicht, ein normales Textfeld wird schön zB ü ausgegeben.
Bei den MehrfachAuswahllisten komt eben folgendes zurück:
@mgraf: Das was Du da zeigst ist ein Tupel, da wird für die Elemente die `repr()`-Darstellung verwendet. Das letzte Element enthält eine Zeichenkette die als UTF-8 interpretiert ein ü enthält.
Da offenbar Zeichen und ihre Kodierungen ein Buch mit sieben Siegeln sind, muss ich hier noch mal klugscheißen: Die Sequenz aus dem Titel ist kein Unicode. Die Sequenz ist die UTF-8-Kodierung eines Umlauts "ü", der nach der Unicode-Tabelle den Codepoint (so etwas wie eine laufende Nummer) 252 hat. Diese Nummer entspricht "zufällig" der ISO-8859-1- und ISO-8859-15- bzw. CP1252-Kodierung des Umlauts. Noch genauer, ist \xC3\xBC noch die string-escape-Kodierung der UTF-8-Kodierung des Umlauts.
In UTF-8 kodieren kann man die Sequenz jedoch nicht, nur aus UTF-8 in Zeichen. Wenn diese Sequenz Teil eines XML-Dokuments ist, hat da schon vorher etwas versagt, denn ein XML-Dokument wird zwar standardmäßig UTF-8-kodiert übertragen, doch wenn man es in Python verarbeitet, sollte man nur noch Zeichen, also unicode-Objekte in Python < 3.x, haben und diese würden dann \u00fc enthalten, was bei zwei führenden Nullen von Python auch gerne als \xfc geschrieben wird. Zu beachten ist aber, dass dies wiederum nur die String-Escape-Kodierung der eigentlichen Zeichen ist. Ein XML-Dokument kann natürlich anders kodiert sein, aber darum sollte sich ein XML-Parser kümmern. Diese Kodierung sollte nicht ins Anwendungsprogramm durchschlagen.
Falls doch, muss man sich merken: Ein Byte-Array in UTF-8-Kodierung macht man zu einem (unicode-)-String durch ary.decode("utf-8") und einen String verwandelt man in ein Byte-Array in UTF-8-Kodierung durch s.encode("utf-8").