Unicode HEx \xc3\xbc in UTF-8 umwandeln

Django, Flask, Bottle, WSGI, CGI…
Antworten
mgraf
User
Beiträge: 34
Registriert: Donnerstag 14. Juni 2007, 11:46

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:

Code: Alles auswählen

('Exportorientiertes Management', 'Tourismusmanagement & Freizeitwirtschaft', 'Unternehmensf\xc3\xbchrung & E-Businessmanagement')

lg
michi
BlackJack

@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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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").

Stefan
Antworten