Python使用chardet检测字符编码

使用chardet.detect检测字符编码:

>>> import urllib
>>> rawdata = urllib.urlopen('http://www.baidu.com').read()
>>> import chardet
>>> chardet.detect(rawdata)
{'confidence': 0.99, 'encoding': 'GB2312'}

对于大量文本,chardet提供了可以渐进检测字符编码的相关方法,并且在满足可信度后自动停止检测。具体通过UniversalDetector类的feed方法不断检测每个文本块,当达到最小可信度阈值时,就标记UniversalDetector类的done值为True,表示完成检测。已经读取完待检测文本之后若调用UniversalDetector类的close方法,它会在没有达到最小可信度的情况下再做一些计算,以便返回最大程度上准确的值,该值和chardet.detect函数一样的返回字典结构。

import urllib
from chardet.universaldetector import UniversalDetector

usock = urllib.urlopen('http://www.baidu.com')
detector = UniversalDetector()
for line in usock.readlines():
    detector.feed(line)
    if detector.done:
        break
detector.close()
usock.close()
print detector.result

终端输出:

{'confidence': 0.98999999999999999, 'encoding': 'GB2312'}

如果想对多个独立文本进行编码检测,可以重复使用同一个UniversalDetector对象,只要在每个文本开始检测前调用reset(),以表明接下来读取的是与之前文本相独立的字符串,然后就可以在类似于上述例子中调用feed(),最后调用close()结束。

import glob
from chardet.universaldetector import UniversalDetector

detector = UniversalDetector()
for filename in glob.glob('*.py'):
    print filename.ljust(60),
    detector.reset()
    for line in file(filename, 'rb'):
        detector.feed(line)
        if detector.done:
            break
    detector.close()
    print detector.result

终端输出:

try.py      {'confidence': 1.0, 'encoding': 'ascii'}
try2.py    {'confidence': 1.0, 'encoding': 'ascii'}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值