使用python检测错误的字符编码

2024-05-20 20:26:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚接触过严肃的编程,我试图编写一个python程序,在从一个文件读取时遇到了这种形式的字符串:

Î Ëèèèèèèèèèèèèèè

它实际上应该是西里尔文(cp-1251),所以这个字符串是错误编码的受害者(我经过长时间的搜索,在这个站点的帮助下发现的)

使用chardet模块中的检测功能也可以找到它

chardet.detect('Îêåàí Åëüçè - Ìàéæå âåñíà'.decode('utf-8').encode('windows-1252'))

得出:
{'confidence':0.76796972356183,'encoding':'windows-1251'}

完成以下操作后,我就可以得到想要的字符串了

^{pr2}$

它给出了:


乌尔巴乔夫

分别用于上述字符串。在

我的问题是:有没有办法检测到这样的字符串? 以下是一些我还没有找到纠正方法的字符串:

佐佐木一郎(另类告别) Yoon K.Lee&Salzburg Kammerp-三»¶À½
⁂‭晉䤠圠牥⁥⁡潂⁹䬨牡慭牴湯捩删浥硩䴠楡⥮
Ã�Ã�óôåõá üôé ï ãÃ�ìïò Ã�ôáí ìéá áðëÃ� õðüèåóç. 在

非常感谢你的答复。在


Tags: 模块文件字符串程序功能编码站点windows
1条回答
网友
1楼 · 发布于 2024-05-20 20:26:56

好吧,那个西里尔字母串不在cp-1251中。正如你所发现的,它已经被编码了“两次”。很可能有人把cp1251中的二进制字符串当作utf8编码到cp1252或类似的东西。在

任何自动检查都无法查出这一点。在

>>> print 'Îêåàí Åëüçè - Ìàéæå âåñíà'.decode('utf8').encode('latin1').decode('cp1251')
Океан Ельзи - Майже весна

有效。后者看起来像UTF8,因为它支持单字节和多字节字符,但它不是UTF8。所以又一次做了一些不正确的转换。尝试所有可能的组合,直到一个作品可能是唯一的可能。在

相关问题 更多 >