我正在處理一個似乎熱衷於返回的應用程序,我相信是雙重UTF-8編碼的字符串。python中的雙解碼unicode
我發送使用UTF-8編碼的字符串u'XüYß'
,因此變成X\u00fcY\u00df
(等於X\xc3\xbcY\xc3\x9f
)。
服務器應該只是迴應我發送它,但返回以下內容:X\xc3\x83\xc2\xbcY\xc3\x83\xc2\x9f
(應爲X\xc3\xbcY\xc3\x9f
)。如果我使用str.decode('utf-8')
將其解碼爲u'X\xc3\xbcY\xc3\x9f'
,它看起來像... unicode-string,包含使用UTF-8編碼的原始字符串。
但是Python將不會讓我沒有解碼再編碼,它首先unicode字符串 - 它由於某種原因失敗,逃脫我:
>>> 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 ...
如何說服Python來重新解碼串? - 和/或是否有任何(實用的)調試字符串中的實際內容的方式,而不通過它,儘管所有隱式轉換print
都使用?
(是的,我已經報告了服務器端的開發者這種行爲。)
好的問題,順便說一下。令人討厭的情況。我希望別人可以提出一個比chr(ord(c))更簡潔的解決方案來將unicode轉換爲str,逐字符... – 2010-11-24 13:30:28
'f(char)用於字符串中的字符'用於編碼的呼叫。 – hop 2010-11-24 13:33:36