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

浙公网安备 33010602011771号