chardet這個第三方庫的使用非常容易,chardet支持檢測中文、日文、韓文等多種語言。
字符串編碼一直是令人非常頭疼的問題,尤其是我們在處理一些不規范的第三方網頁的時候。雖然Python提供了Unicode表示的str和bytes兩種數據類型,並且可以通過encode()和decode()方法轉換,但是,在不知道編碼的情況下,對bytes做decode()不好做。
對於未知編碼的bytes,要把它轉換成str,需要先“猜測”編碼。猜測的方式是先收集各種編碼的特征字符,根據特征字符判斷,就能有很大概率“猜對”。
官方文檔:https://chardet.readthedocs.io/en/latest/
github地址:https://github.com/chardet/chardet
安裝:pip3 install chardet
截至目前,可以檢測的編碼:
當我們拿到一個bytes時,就可以對其檢測編碼。用chardet檢測編碼,只需要一行代碼:
import chardet
print(chardet.detect(b'Hello, world!'))
# 運行結果
# 檢測出的編碼是ascii,注意到還有個confidence字段,表示檢測的概率是1.0(即100%)。
{
'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
import chardet
data = '真相只有一個'.encode('gbk')
print(chardet.detect(data))
# 運行結果
# 檢測的編碼是GB2312,注意到GBK是GB2312的超集,兩者是同一種編碼,檢測正確的概率是99%,
# language字段指出的語言是'Chinese'。
{
'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
import chardet
data = '真相只有一個'.encode('utf-8')
print(chardet.detect(data))
# 運行結果
{
'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
import chardet
data = '真実はいつもひとつ'.encode('euc-jp')
print(chardet.detect(data))
# 運行結果
{
'encoding': 'EUC-JP', 'confidence': 1.0, 'language': 'Japanese'}
可見,用chardet檢測編碼,非常簡單。獲取到編碼後,再轉換為str,就可以方便後續處理。