Python 常用的第三方模块 chardet

xiaoxiao2025-05-23  22

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

chardet这个第三方库正好就派上了用场。用它来检测编码,简单易用

如果安装了Anaconda,chardet就已经可用了。否则,需要在命令行下通过pip安装:pip install chardet注意: 里面的参数是一个字节类型

当我们拿到一个bytes时,就可以对其检测编码。用chardet检测编码,只需要一行代码:

data = '离离原上草,一岁一枯荣'.encode('gbk') print(chardet.detect(data)) # {'encoding': 'GB2312', 'confidence': 0.7407407407407407, 'language': 'Chinese'} data = '离离原上草,一岁一枯荣'.encode('utf-8') print(chardet.detect(data)) # {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''} data = "cc" print(chardet.detect(data.encode("utf-8"))) # {'encoding': 'ascii', 'confidence': 1.0, 'language': ''} # 只有中文的时候,这个encode("编码格式才会起作用"), 其实我也不是很清楚为啥? 但是 这个“cc”.encode("utf-8") # 得到的结果既可以用 utf-8 解码, 也可以用 gbk解码

用法

import chardet import requests url = 'https://www.baidu.com/' res = requests.get(url) # chardet.detect( a ) 这里面的参数是一个字节格式,数字和英文默认的是 ascii码, 其他的是按照自己本身设置的编码 print(chardet.detect(res.content).get("encoding")) # utf-8 获取文章的编码格式 , coding = chardet.detect(res.content).get('encoding', 'utf-8') print(coding) # utf-8 print(chardet.detect(b'Hello, world!')) # 得到的是一个字典 {'encoding': 'ascii', 'confidence': 1.0, 'language': ''} print(res.text) # 有时候当汉字乱码的时候,我们不能直接获取text属性 str_content = str(res.content, encoding=coding, errors='ignore')‘’ print(str_content) # 这两个是不一样的,一般情况下是一样的, 这样做是我为了解决乱码问题, 理解参数的含义就知道怎么玩了 contents = res.content.decode("utf-8") print(contents == str_content) # True 你会发现这两种是一模一样的,只不过是写法不同,通过先 获取字节 content,然后再 decode 编码格式也可以解决这个乱码问题,任选其一即可
转载请注明原文地址: https://www.6miu.com/read-5030579.html

最新回复(0)