python3用chardet檢測字符編碼

字符串編碼一直是令人非常頭疼的問題,尤其是我們在處理一些不規範的第三方網頁的時候。雖然Python提供了Unicode表示的str和bytes兩種數據類型,並且可以通過encode()和decode()方法轉換,但是,在不知道編碼的情況下,對bytes做decode()不好做。

chardect查看文件內容、字符串內容編碼方法
注意:使用chardect檢測encode過後的字節碼,或bytes字節碼

對於未知編碼的bytes,要把它轉換成str,需要先“猜測”編碼。猜測的方式是先收集各種編碼的特徵字符,根據特徵字符判斷,就能有很大概率“猜對”。

當然,我們肯定不能從頭自己寫這個檢測編碼的功能,這樣做費時費力。chardet這個第三方庫正好就派上了用場。用它來檢測編碼,簡單易用。

安裝chardet
如果安裝了Anaconda,chardet就已經可用了。否則,需要在命令行下通過pip安裝:

$ pip install chardet
如果遇到Permission denied安裝失敗,請加上sudo重試。

使用chardet
當我們拿到一個bytes時,就可以對其檢測編碼。用chardet檢測編碼,只需要一行代碼:

>>> chardet.detect(b'Hello, world!')
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}

檢測出的編碼是ascii,注意到還有個confidence字段,表示檢測的概率是1.0(即100%)。

我們來試試檢測GBK編碼的中文:

>>> data = '離離原上草,一歲一枯榮'.encode('gbk')
>>> chardet.detect(data)
{'encoding': 'GB2312', 'confidence': 0.7407407407407407, 'language': 'Chinese'}

檢測的編碼是GB2312,注意到GBK是GB2312的超集,兩者是同一種編碼,檢測正確的概率是74%,language字段指出的語言是’Chinese’。

對UTF-8編碼進行檢測:

>>> data = '離離原上草,一歲一枯榮'.encode('utf-8')
>>> chardet.detect(data)
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}

我們再試試對日文進行檢測:

>>> data = '最新の主要ニュース'.encode('euc-jp')
>>> chardet.detect(data)
{'encoding': 'EUC-JP', 'confidence': 0.99, 'language': 'Japanese'}

可見,用chardet檢測編碼,使用簡單。獲取到編碼後,再轉換爲str,就可以方便後續處理。

chardet支持檢測的編碼列表請參考官方文檔Supported encodings。

小結
使用chardet檢測編碼非常容易,chardet支持檢測中文、日文、韓文等多種語言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章