我正在处理一个似乎热衷于返回的应用程序,我相信是双重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