python3之chardet判断编码

官方文档:https://chardet.readthedocs.io/en/latest/supported-encodings.html
在处理一些不规范的第三方网页的时候,在不知道编码的情况下,对bytes做decode()可能会得到错误结果。chardet用来检测未知编码的bytes,通过检测结果转换成str。
安装:pip install chardet

判断编码并解码

Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import chardet
>>> str1 = b"abc"
>>> str1
b'abc'
>>> chardet.detect(str1)  # windows系统下
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
>>> str1.decode('ascii')
'abc'
>>>
>>>
>>> str2 = "123".encode("gbk")
>>> str2
b'123'
>>> chardet.detect(str2)
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
>>> str2.decode('ascii')
'123'
>>> str2.decode('gbk')
'123'
>>>
>>>
>>> str3 = "中国".encode("gbk")
>>> str3
b'\xd6\xd0\xb9\xfa'
>>> chardet.detect(str3)
{'encoding': 'IBM855', 'confidence': 0.7679697235616183, 'language': 'Russian'}
>>> str3.decode("IBM855")
'ол╣Щ'
>>> str3.decode("GBK")
'中国'
>>>
>>>
>>> str4 =  '中国'.encode("utf8")
>>> str4
b'\xe4\xb8\xad\xe5\x9b\xbd'
>>> chardet.detect(str4)
{'encoding': 'utf-8', 'confidence': 0.7525, 'language': ''}
>>> str4.decode("utf8")
'中国'
>>>
>>>
>>> str5 = "中华人民共和国".encode("gbk")
>>> str5
b'\xd6\xd0\xbb\xaa\xc8\xcb\xc3\xf1\xb9\xb2\xba\xcd\xb9\xfa'
>>> chardet.detect(str5)
{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}

confidence:检测结果的正确率。

由上面的例子可知chardet的检测结果存在一定的误差。


你可能感兴趣的:(python_爬虫)