我是认真编程的新手,我正在尝试编写一个Python程序,在这个文件中我从文件中读取字符串时遇到了字符串:
_________
____________
这实际上应该是西里尔语(CP-1251),所以这个字符串是错误编码的受害者(在这个网站的帮助下,经过长时间的搜索,我发现它是:AA>)
在chardet模块中使用detect函数也可以找到它
chardet.detect('Îêåàí Åëüçè - Ìàéæå âåñíà'.decode('utf-8').encode('windows-1252'))
它给出:
{'confidence':0.7679697235616183,'encoding':'windows-1251'}
在完成下面的操作之后,我就可以得到想要的字符串
string.decode('utf-8').encode('windows-1252').decode('windows-1251').encode('utf-8')
它给出:
以及
克诺普诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布诺伊布
分别用于上述字符串。
我的问题是:有没有发现这样的字符串?
下面是一些其他的字符串,我甚至没有找到纠正的方法:
佐佐木:《一个不同的离别》(一)
Yoon K.Lee&Salzburg Kammerp公司
_晉䤠圠牥_潂_䬨牡慭牴湯捩删浥硩䴠楡_
“195”“195”“195”“195”“195”“195”“195”“195”“195”“195”“195”“195”“195”“195”
“195”、“195”、“195”、“195”、“195”、“195”、“195”。
非常感谢你的答复。
最佳答案
好吧,那个西里尔字符串不在CP-1251中。你似乎已经发现,它已经被编码了“两次”。很可能有人在cp1251中提取了一个二进制字符串,认为它是utf8格式的,并将其编码为cp1252或类似的格式。
任何自动检查都无法发现这一点。
>>> print 'Îêåàí Åëüçè - Ìàéæå âåñíà'.decode('utf8').encode('latin1').decode('cp1251')
Океан Ельзи - Майже весна
作品。后者看起来像utf8,因为它同时支持单字节和多字节字符,但它不是utf8。所以我们又做了一些不正确的转变。可能只有通过所有可能的组合才能完成一项工作。