字串編碼一直是令人非常頭疼的問題,尤其是我們在處理一些不規範的第三方網頁的時候。雖然python提供了unicode表示的str
和bytes
兩種資料型別,並且可以通過encode()
和decode()
方法轉換,但是,在不知道編碼的情況下,對bytes
做decode()
不好做。
對於未知編碼的bytes
,要把它轉換成str
,需要先「猜測」編碼。猜測的方式是先收集各種編碼的特徵字元,根據特徵字元判斷,就能有很大概率「猜對」。
當然,我們肯定不能從頭自己寫這個檢測編碼的功能,這樣做費時費力。chardet這個第三方庫正好就派上了用場。用它來檢測編碼,簡單易用。
如果安裝了anaconda,chardet就已經可用了。否則,需要在命令列下通過pip安裝:
$ pip install chardet
如果遇到permission denied安裝失敗,**上sudo重試。
當我們拿到乙個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支援檢測的編碼列表請參考官方文件supported encodings
Python常用第三方模組
requests kenneth reitz寫的最富盛名的http庫。每個python程式設計師都應該有它。wxpython python的乙個gui 圖形使用者介面 工具。pillow 它是pil python圖形庫 的乙個友好分支。對於使用者比pil更加友好,對於任何在圖形領域工作的人是必備的庫...
第三方模組
參考 第三方模組 requestsimport requests 對於帶引數的url,傳入乙個dict作為params引數 params 要傳入http header時,我們傳入乙個dict作為headers引數 請求中傳入cookie,只需準備乙個dict傳入cookies引數 my cookie...
Python入門基礎(11) 第三方模組
1 大概形式 2 第三方庫的安裝 大致流程如下 首先,你直接匯入模組requests,會報錯,因為你本地沒有安裝這個模組 有的import是可以的,因為python自帶的 然後你就要自己安裝一下 注意 有的時候不是沒有安裝,而是python版本不一樣,因為python2與python3相差很大,所以...