Python chardet模块

1. chardet是什么

  chardet是python的一个第三方编码检测模块,可以检测文件,XML等字符编码的类型。通过pip install chardet安装使用。

2.chardet怎么用
  • 1.通过命令行直接调用(chardet提供了一个命令行工具,可以直接使用),形如chardet somefile someotherfile的样式。
    这里写图片描述上面先创建了一个文件并向里面写入一些内容,然后通过chardet命令行调用检测文件编码方式。检测结果为utf8,可信度为75%。
  • 2.通过引入模块,调用方法使用。
from chardet import detect

cs = '中国'
js = 'ジャパン'
ks = '한국인'

cs_ef = detect(cs.decode('utf8').encode('gbk'))
js_ef = detect(js.decode('utf8').encode('euc_jp'))
ks_ef = detect(js.decode('utf8').encode('euc_kr'))

使用也很简单,直接使用detect方法即可。之所以先编号码,再去检测,是想看一看检测结果怎么样。下面是结果。

这里写图片描述

gbk兼容gb2312,没问题。euc_jp是日文的一种编码方式,韩文的euc_kr倒是被检测为了ibm866,维基百科上866的编码如下所示,貌似有点对不上。

这里写图片描述

下面再写几个例子试试看效果。检测目标为中日韩美德五个网站编码方式。

from chardet import detect
from urllib import urlopen

urls = [
    'http://www.yau.edu.cn/',
    'http://www.nhk.or.jp/',
    'http://www.kbs.co.kr/',
    'http://edition.cnn.com/',
    'https://de.yahoo.com/'
]

for url in urls:
    resp = urlopen(url)
    print (url, detect(resp.read()))

下面是测试结果。

这里写图片描述

大都是utf8编码的(也理应如此)。那个韩文网站检测为euc_kr编码方式。上面应该再加个验证的,就是顺便把网站的编码从网页上找出来,然后和chardet检测出的结果做个对比。下面加上。

import re
from chardet import detect
from urllib import urlopen

urls = [
    'http://www.yau.edu.cn/',
    'http://www.nhk.or.jp/',
    'http://www.kbs.co.kr/',
    'http://edition.cnn.com/',
    'https://de.yahoo.com/'
]

p = re.compile(r'<meta[^<]+charset[^>]+>')

for url in urls:
    resp = urlopen(url).read()
    res = re.search(p, resp)
    print (url, detect(resp), res.group())

下面看一看结果如何。

这里写图片描述

通过结果可知这些网站编码检测的结果与实际结果是一致的。

3.注意事项

在chardet源码里的detect函数是这样定义的:

__version__ = "2.3.0"
from sys import version_info


def detect(aBuf):
    if ((version_info < (3, 0) and isinstance(aBuf, unicode)) or
            (version_info >= (3, 0) and not isinstance(aBuf, bytes))):
        raise ValueError('Expected a bytes object, not a unicode object')

    from . import universaldetector
    u = universaldetector.UniversalDetector()
    u.reset()
    u.feed(aBuf)
    u.close()
    return u.result

这意味着在py3中不能使用str字符串,需要使用bytes字符串。

这里写图片描述

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值