我正在处理一个应用程序,它似乎喜欢返回我认为是双重UTF-8编码的字符串。
我发送了使用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'
,看起来像是一个包含使用UTF-8编码的原始字符串的Unicode字符串。
但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
使用的方式传递它?
(是的,我已向服务器端的开发人员报告了这种行为。)