我有一个问题,用绳子,我从我的客户在XMLRPC的一赠。 他送我进行两次编码UTF8字符串:(所以当我在python让他们我有了更多的时间进行解码的unicode的对象,但显然蟒蛇不允许。但是我注意到我的客户,我需要到现在他修复它之前做快速的解决方法。
从TCP转储原始字符串:
<string>Rafa\xc3\x85\xc2\x82</string>
此被转换成:
u'Rafa\xc5\x82'
我们得到的最好的是:
eval(repr(u'Rafa\xc5\x82')[1:]).decode("utf8")
这导致正确的字符串是:
u'Rafa\u0142'
这个工程是不过丑得要命,并且不能在生产代码中使用。 如果有人知道如何以更合适的方式解决这个问题,请写信。 谢谢,克里斯
>>> s = u'Rafa\xc5\x82'
>>> s.encode('raw_unicode_escape').decode('utf-8')
u'Rafa\u0142'
>>>
佑,这很有趣!
>>> original = "Rafa\xc3\x85\xc2\x82"
>>> first_decode = original.decode('utf-8')
>>> as_chars = ''.join([chr(ord(x)) for x in first_decode])
>>> result = as_chars.decode('utf-8')
>>> result
u'Rafa\u0142'
所以你要做的第一解码,得到一个Unicode字符串,其中每个字实际上是一个UTF-8字节的值。 你可以通过每一个这些字符的整数值去找回一个真正的UTF-8字符串,然后您可以解码为正常。
>>> weird = u'Rafa\xc5\x82'
>>> weird.encode('latin1').decode('utf8')
u'Rafa\u0142'
>>>
latin1的仅仅是Richie的nuts'n'bolts方法的缩写。
这是非常奇怪的是严重不足的描述raw_unicode_escape
编解码器给出了相同的结果latin1
在这种情况下。 他们总是给出相同的结果? 如果是这样,为什么有这样的编解码器? 如果没有,那就最好确切知道OP的客户究竟是如何做到从改造'Rafa\xc5\x82'
到u'Rafa\xc5\x82'
,然后准确地扭转这一过程-否则,我们可能会脱胶如果双编码被固定之前不同的数据作物起来。