Je travaille sur une application qui semble vouloir retourner, ce que je crois être, des chaînes codées en UTF-8.Unicode à double décodage en python
J'envoie la chaîne u'XüYß'
codée en utilisant UTF-8, devenant ainsi X\u00fcY\u00df
(égale à X\xc3\xbcY\xc3\x9f
).
Le serveur doit simplement l'écho ce que je l'ai envoyé, mais renvoie les éléments suivants: X\xc3\x83\xc2\xbcY\xc3\x83\xc2\x9f
(devrait être X\xc3\xbcY\xc3\x9f
). Si je le décode en utilisant str.decode('utf-8')
devient u'X\xc3\xbcY\xc3\x9f'
, ce qui ressemble à un ... unicode-string, contenant la chaîne d'origine encodée en utilisant UTF-8.
Mais Python ne me laisse pas décoder une chaîne de caractères Unicode sans réencodage premier - qui échoue pour une raison, qui me échappe:
>>> 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 ...
Comment puis-je persuade Python de re-décoder la chaîne ? - et/ou existe-t-il un moyen (pratique) de déboguer ce qui est réellement dans les chaînes, sans le passer par toutes les conversions implicites print
?
(Et oui, j'ai rapporté ce comportement avec les développeurs du côté serveur.)
** Whew ** - n'a pas besoin d'utiliser ma chose effrayante. –