Python字符串编码检测
字符串編碼產(chǎn)生的亂碼著實(shí)讓人頭疼……
關(guān)于字符串和編碼的知識(shí),可以參考廖雪峰大大的博客字符串和編碼
那么有沒(méi)有辦法完全正確的檢測(cè)字符集編碼呢?答案是:沒(méi)有!參考how-to-determine-the-encoding-of-text
但是在Python有兩種還比較簡(jiǎn)單的方法:
1、chardet
chardet包提供detect方法
安裝pip install chardet
使用chardet.detect方法(該方法傳入的參數(shù)是bytes或bytearray,不支持str)
檢測(cè)出的編碼是utf-8,注意到還有個(gè)confidence字段,表示檢測(cè)的概率是0.99(即99%)。
data = '離離原上草,一歲一枯榮'.encode('utf-8') chardet.detect(data) # 輸出 {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}2、UnicodeDammit
傳說(shuō)比chardet更可靠,說(shuō)是安裝chardet后結(jié)果更好
安裝pip install bs4
使用(同時(shí)支持bytes 和 str,str的時(shí)候編碼是None)
from bs4 import UnicodeDammitdata = '離離原上草,一歲一枯榮'.encode('utf-8') dammit = UnicodeDammit(data) print(dammit.unicode_markup) print(dammit.detector.chardet_encoding) # 輸出 離離原上草,一歲一枯榮 utf-8data = '離離原上草,一歲一枯榮' dammit = UnicodeDammit(data) print(dammit.unicode_markup) print(dammit.original_encoding) # 輸出 離離原上草,一歲一枯榮 None為什么UnicodeDammit好用,因?yàn)閁nicodeDammit 已經(jīng)綜合考慮了chardet 的結(jié)果,chrdet 是學(xué)習(xí)了大量的文本,然后再來(lái)算出最有可能的編碼方式
UnicodeDammit 是
1. 先從申明的編碼方式嘗試解析
2. 嘗試從開(kāi)頭的幾個(gè)字符開(kāi)始解析
3. chardet 檢測(cè)出來(lái)的推薦編碼
4. utf-8 解析
5. windows-1252 解析
?
總結(jié)
以上是生活随笔為你收集整理的Python字符串编码检测的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux more命令查找关键字,Li
- 下一篇: Python 3.8 官网文档(中文版附