Ich arbeite gegen eine Anwendung, die darauf scharf zu kehren scheint, was ich glaube, doppelte UTF-8-codierte Strings.Doppeldecodierung Unicode in Python
Ich sende die Zeichenfolge u'XüYß'
kodiert mit UTF-8, so dass X\u00fcY\u00df
(gleich X\xc3\xbcY\xc3\x9f
).
Der Server sollte einfach wiederholen, was ich es sendete, noch gibt Folgendes zurück: X\xc3\x83\xc2\xbcY\xc3\x83\xc2\x9f
(sollte X\xc3\xbcY\xc3\x9f
sein). Wenn ich es mit str.decode('utf-8')
entzifferne, wird u'X\xc3\xbcY\xc3\x9f'
, die aussieht wie ein ... Unicode-String, enthält die ursprüngliche Zeichenfolge mit UTF-8 codiert.
Aber Python lässt mich nicht ein Unicode-String dekodieren ohne Umcodierung es zuerst - die aus irgendeinem Grund fehlschlägt, die mich entkommt:
>>> ret = 'X\xc3\x83\xc2\xbcY\xc3\x83\xc2\x9f'.decode('utf-8')
>>> ret
u'X\xc3\xbcY\xc3\x9f'
>>> ret.decode('utf-8')
# Throws UnicodeEncodeError: 'ascii' codec can't encode ...
Wie kann ich Python überzeugen die Zeichenfolge erneut zu entschlüsseln ? - und/oder gibt es eine (praktische) Art zu debuggen, was tatsächlich in den Strings ist, ohne es zu übergeben, obwohl die gesamte implizite Konvertierung print
verwendet?
(Und ja, habe ich dieses Verhalten mit den Entwicklern der Server-Seite angegeben.)
** Puh ** - brauche nicht meine gruselige Sache zu benutzen. –