在處理字串時,常常會遇到不知道字串是何種編碼,如果不知道字串的編碼就不能將字串轉換成需要的編碼。面對多種不同編碼的輸入方式,是否會有一種有效的編碼方式?chardet是乙個非常優秀的編碼識別模組。
$ pip install chardet
2.簡單使用
當我們拿到乙個bytes
時,就可以對其檢測編碼。用chardet檢測編碼,只需要一行**:
>>> chardet.detect(b'hello, world!')
檢測出的編碼是ascii
,注意到還有個confidence
字段,表示檢測的概率是1.0(即100%)。
我們來試試檢測gbk編碼的中文:
>>> data = '離離原上草,一歲一枯榮
'.encode('
gbk'
)>>>chardet.detect(data)
檢測的編碼是gb2312
,注意到gbk是gb2312的超集,兩者是同一種編碼,檢測正確的概率是74%,language
字段指出的語言是'chinese'
。
對utf-8編碼進行檢測:
>>> data = '離離原上草,一歲一枯榮
'.encode('
utf-8')
>>>chardet.detect(data)
我們再試試對日文進行檢測:
>>> data = '最新の主要ニュース
'.encode('
euc-jp')
>>>chardet.detect(data)
可見,用chardet檢測編碼,使用簡單。獲取到編碼後,再轉換為str
,就可以方便後續處理。
當用於檢測的文件特別大時,可以chardet的子模組chardet.universaldetector。這個模組允許我們分多次(逐行讀取或者自行斷行讀取)檢測文字的編碼格式,當達到一定的閾值時便可以提前退出檢測。這樣做可以有效地節省資源,提高程式效率,同時保證檢測結果的準確性。
from chardet.universaldetector importuniversaldetector
detector = universaldetector() #
初始化乙個universaldetector物件
f = open('
test.txt
', '
rb') #
test.txt是乙個utf-8編碼的文字文件
for line in
f: detector.feed(line)
#逐行載入universaldetector物件中進行識別
if detector.done: #
done為乙個布林值,預設為false,達到閾值時變為true
break
detector.close()
#呼叫該函式做最後的資料整合
f.close()
(detector.result)
#
需要注意的是:如果對多個不同**的文字進行檢測,在每次檢測完畢時,必須呼叫一次universaldetector物件的reset函式,將之前的檢測資料清除。否則會導致後面的檢測結果混亂。
**:
python使用模組chardet判斷字元編碼
python中chardet 用來實現字串 檔案編碼檢測模板 2.chardet能夠檢測到的編碼方式 chardet 模組可以檢測以下編碼 3.chardet模組使用 使用chardet模組判斷字元編碼使用detect 函式即可 import chardet import urllib.reques...
chardet編碼識別模組
chardet是第三方提供的編碼識別模組,具有較高的準確度。pip install chardetchardet.detect context 傳入引數 字串 返回值 字典,包含可信度和編碼。1 檢測網頁編碼 import chardet import urllib test urllib.urlo...
python編碼檢測模組chardet
抓取一批頁面的內容時,經常會遇到編碼型別不同的問題,經常令我們比較頭痛,python有乙個第三方的編碼檢測模組模組,可以為我們自動檢測編碼型別,並給出信心度,它檢測的返回結果形式為 它是乙個字典型別,我們可以通過字典的方式訪問結果中的值。如果採用源 安裝方法,有可能會提示缺少setuptools這個...