python 编码神器,完美解决乱码问题

我们在编程过程中可能经常会遇到乱码的问题,我们也不知道文件的编码,这怎么解决呢?一个神奇的库就来解决你问题了。

准确的说应该是两个库,但是这两个库很像,基本api也是一致的,我来介绍一下:

chardetcchardet

根据介绍cchardet会比chardet快得多,在python3.6.1测试如下:

Request(call/s)
chardet v3.0.20.35
cchardet v2.0.11467.77
速度比较

从上边的表格来看,速度是要快很多的。我们来介绍一下怎么用吧!

import cchardet,chardet
data = '离离原上草,一岁一枯荣'.encode('utf8')

print(cchardet.detect(data))
print(chardet.detect(data))

#####output
{'encoding': 'UTF-8', 'confidence': 0.8762500286102295}
{'encoding': 'utf-8', 'confidence': 0.87625, 'language': ''}
import cchardet,chardet
data = '离离原上草,一岁一枯荣'.encode('gbk')

print(cchardet.detect(data))
print(chardet.detect(data))


#####output
{'encoding': None, 'confidence': None}
{'encoding': 'GB2312', 'confidence': 0.7407407407407407, 'language': 'Chinese'}

从上边的例子也可以看出 chardet 会比cchardet多一个 language 参数,但也不是一定能够识别出来的。GBK是GB2312的超集,两者是同一种编码。所以从这个例子看chardet可能会比cchardet好一点呢?具体使用看大家需求吧!

我们常见的例子可能就是请求网页时的编码了,举个例子吧。

import cchardet,chardet,requests

res = requests.get('https://baidu.com')
coding = chardet.detect(res.content)
coding_1 = cchardet.detect(res.content)
print(res.content.decode(coding['encoding']))
print(res.content.decode(coding_1['encoding']))

两种都是能正常输出的,结果就不在这展示了,小伙伴们可以自己尝试一下。

欢迎感兴趣的小伙伴关注小站哦!一起讨论学习进步!

python 编码神器,完美解决乱码问题》有2条评论

评论已关闭。