【发布时间】:2011-05-15 02:23:25
【问题描述】:
我正在处理一个似乎热衷于返回我认为是双 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',它看起来像一个... 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 使用它?
(是的,我已经向服务器端的开发人员报告了这种行为。)
【问题讨论】: