python判斷字串編碼——使用chardet判斷字串編碼的方法
本文例項講述了python使用chardet判斷字串編碼的方法。分享給大家供大家參考。具體分析如下:
最近利用python抓取一些網上的資料,遇到了編碼的問題。非常頭痛,總結一下用到的解決方案。
linux中vim下檢視檔案編碼的命令 set fileencoding
python中一個強力的編碼檢測包 chardet ,使用方法非常簡單。linux下利用pip install chardet實現簡單安裝
1 2 3 4 |
import
chardet
f
=
open ( 'file' , 'r' )
fencoding = chardet.detect(f.read()) print
fencoding
|
fencoding輸出格式 {'confidence': 0.96630842899499614, 'encoding': 'GB2312'} ,只能判斷是否為某種編碼的概率。比較準確的結果了。輸入引數為str型別。
瞭解python中str的編碼後可以利用decode和encode來實現編碼的轉換。
一般流程是str利用decode方法根據str的編碼將其解碼為unicode字串型別,然後利用encode根據特定的編碼將unicode字串型別轉換為特定的編碼。python中str和unicode屬於兩種不同的型別,如下。
一般情況下window預設編碼gbk,linux預設編碼utf8
python程式設計中 系統編碼,python編碼,檔案編碼 的概念。
系統編碼:預設寫原始碼的編輯器的編碼方式。它代表原始碼檔案內的所有內容都是根據詞方式編碼成二進位制碼流。存入到磁碟中的。linux下通過locale命令檢視。
python編碼:指python內設定的解碼方式。如果不設定的話,python預設的是ascii解碼方式。如果python原始碼檔案中不出現中文的話,這個地方怎麼設定應該不會問題。
設定方法:在原始碼檔案開頭(一定是第一行):#-*-coding:UTF-8-*-,原始碼檔案的設定解碼方式是UTF-8 或者
1 2 3 |
import
sys
reload (sys)
sys.setdefaultencoding( 'UTF-8' )
|
檔案編碼:文字的編碼方式,linux下vim利用set fileencoding檢視。
一般情況下輸出亂碼的原因就是 沒有按照系統解碼的方式進行編碼。
比如print s, s型別為str,linux系統下系統預設編碼為utf8編碼,s在輸出前就應該編碼為utf8。如果s為gbk編碼就應該這樣輸出。print s.decode('gbk').encode('utf8')才能輸出中文。
window下面情況相同,window預設編碼為gbk編碼,所以s輸出前必須編碼為gbk。
python處理中一般處理unicode型別。這樣輸出前直接編碼即可。
希望本文所述對大家的Python程式設計有所幫助。