我有一个问题,用绳子,我从我的客户在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',然后扭转这一过程恰好 - 否则,我们可能如果双编码固定之前不同的数据农作物达来脱胶

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top