2020.10.17 chardet

字符串编码一直是令人很头疼的问题,特别是在我们处理一些不规范的第三方网站时。虽然Python提供了Unicode表示的strbytes两种数据类型,并且可以通过encode()decode()方法转换,但是在不知道编码(即decode方法的参数)的情况下,对bytesdecode()并不好做。

对于未知编码的bytes,要把它转换为str,需要先“猜测”编码,这一点可以通过第三方库chardet实现。

 

当我们拿到一个bytes时,就可以对其检测编码。下面是用chardet检测编码的一些例子:

方法:chardet.detect('bytes')

import chardet
data=[]
data.append(b'Hello,world!')
data.append('富强 民主 文明 和谐 自由 平等 公正 法治'.encode('gbk'))
data.append('富强 民主 文明 和谐 自由 平等 公正 法治'.encode('utf-8'))
data.append('最新の主要ニュース'.encode('euc-jp'))

for i in data:
    print(chardet.detect(i))

{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
{'encoding': 'EUC-JP', 'confidence': 0.99, 'language': 'Japanese'}

结果dict的第一个字段encoding表示检测出来的编码;第二个字段confidence表示检测的可信度,1.0表100%,0.99表99%;第三个字段language表示检测出的语言

 

使用chardet检测编码后,就获得了decode方法的参数,之后就可以用decode()转化为str,方便进行后续的处理。

chardet支持检测的编码列表可见官方文档:Supported encodings

posted @ 2020-10-17 12:07  ShineLe  阅读(36)  评论(0)    收藏  举报