Python字符串编码检测

字符串编码产生的乱码着实让人头疼……

关于字符串和编码的知识,可以参考廖雪峰大大的博客字符串和编码

那么有没有办法完全正确的检测字符集编码呢?答案是:没有!参考how-to-determine-the-encoding-of-text

但是在Python有两种还比较简单的方法:

1、chardet

chardet包提供detect方法

安装pip install chardet

使用chardet.detect方法(该方法传入的参数是bytes或bytearray,不支持str)

检测出的编码是utf-8,注意到还有个confidence字段,表示检测的概率是0.99(即99%)。

data = '离离原上草,一岁一枯荣'.encode('utf-8')
chardet.detect(data)
# 输出
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}

2、UnicodeDammit

传说比chardet更可靠,说是安装chardet后结果更好

安装pip install bs4

使用(同时支持bytes 和 str,str的时候编码是None)

from bs4 import UnicodeDammit

data = '离离原上草,一岁一枯荣'.encode('utf-8')
dammit = UnicodeDammit(data)
print(dammit.unicode_markup)
print(dammit.detector.chardet_encoding)
# 输出
离离原上草,一岁一枯荣
utf-8


data = '离离原上草,一岁一枯荣'
dammit = UnicodeDammit(data)
print(dammit.unicode_markup)
print(dammit.original_encoding)
# 输出
离离原上草,一岁一枯荣
None

为什么UnicodeDammit好用,因为UnicodeDammit 已经综合考虑了chardet 的结果,chrdet 是学习了大量的文本,然后再来算出最有可能的编码方式

UnicodeDammit 是

1. 先从申明的编码方式尝试解析

2. 尝试从开头的几个字符开始解析

3. chardet 检测出来的推荐编码

4. utf-8 解析

5. windows-1252 解析

猜你喜欢

转载自blog.csdn.net/dou3516/article/details/111505494