如何在Python脚本中识别文件的编码方式

       在Python的第三方库中,有一个叫chardet的库,可以用来识别文件或者网页数据的编码方式,然后再根据相应的编码方式进行解码。一般的,对于单个静态文件,我们可以通过一些编辑软件打开直接看其编码方式,但是有时候对于需要和脚本动态交互的,或者是多个文件,且其编码方式并不一定,则就需要通过在脚本中判断其编码方式,然后指定解码方式对其解码。

       利用chardet,可以用如下简单的语句判断一个文件的编码方式。这里需要注意的是,读取的模式应该为'wb'。

import chardet

f=open(r'filepath','wb')
chardet.detect(f.read())
###output {'encoding': 'UTF-8', 'confidence': 0.99}

       但是如果对于大文件,直接用read()方法,则会全部读入,这会相当耗费时间。因此对于大文件,chardet实现了逐行判断,然后积累信息,只要可以做出判断,便会停止,不再继续读入。参考如下语句。

from chardet.universaldetector import UniversalDetector

detector = UniversalDetector()
for line in f:
    detector.feed(line)
    if detector.done: break
detector.close()

print(detector.result)

       需要注意的是,就像笔者在上一篇博客中写到的,对于有些在目标文件所包含的字符上极为相近的编码方式,比如utf8和ISO-8859-1,chardet也无法做出准确的判断,甚至会判断错误。比如笔者就碰到了chardet把西欧语系的ISO-8859-1的编码方式判断为土耳其语系的Windows-1254编码方式,因此chardet也不是万能的,毕竟有时候源文件的信息给的不够,根本没法做出准确的判断。但是根据经验,一般如果utf8不行,可以试试ISO-8859-1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值