如何修复Python中双重编码和损坏的字符串?

如何修复Python中双重编码和损坏的字符串?,python,python-2.7,python-unicode,Python,Python 2.7,Python Unicode,我的过程是处理已损坏的数据。我可以说它已经用UTF-8进行了双重编码,但这只是故事的一半。双解码仅适用于单字节(拉丁语)且未受损通过UTF-8的代码点。不能使用.decode('utf-8')。encode('raw\u unicode\u escape')。decode('utf-8') 我举了一个例子来帮助你弄明白这一点。我要通过的一个条件是: '\xc3\x82\xc2\xa9\xc3\x82\xc2\xae\xc3\xa2\xe2\x80\x9e\xc2\xa2' 这应该解决以下问题:

我的过程是处理已损坏的数据。我可以说它已经用UTF-8进行了双重编码,但这只是故事的一半。双解码仅适用于单字节(拉丁语)且未受损通过UTF-8的代码点。不能使用
.decode('utf-8')。encode('raw\u unicode\u escape')。decode('utf-8')

我举了一个例子来帮助你弄明白这一点。我要通过的一个条件是:

'\xc3\x82\xc2\xa9\xc3\x82\xc2\xae\xc3\xa2\xe2\x80\x9e\xc2\xa2'
这应该解决以下问题:

u'\xa9\xae\u2122'
(c)和(r)符号的前两个代码点不需要代理项对,因此很明显存在于原始字节中。但是,最后一个字符(tm)符号是一个16位的代码点,它会被执行此操作的任何进程损坏

如果在该点之前切掉字符串,则可以成功地进行双重解码:

'\xc3\x82\xc2\xa9\xc3\x82\xc2\xae'.decode('utf-8').encode('raw_unicode_escape').decode('utf-8')
但是,这不适用于整个字符串,因为第一次解码的结果如下:

u'\xc2\xa9\xc2\xae\xe2\u201e\xa2'

有人能告诉我解决这个问题的正确方向吗?在此期间,我将继续探究这个问题,看看我是否能找到答案。

好吧,所以我基本上只是对编码进行了一些猜测,直到我找到了解决方案。问题是数据也是cp1252编码的(可能是因为数据来自Windows系统)。解决方案是调用
.decode('utf-8')。encode('cp1252')。decode('utf-8')
,然后瞧:

我希望其他人能从中得到帮助

发现这也有帮助:

>>> raw = '\xc3\x82\xc2\xa9\xc3\x82\xc2\xae\xc3\xa2\xe2\x80\x9e\xc2\xa2'
>>> print raw.decode('utf-8').encode('cp1252').decode('utf-8')
©®™