下面代碼段是關於python使用chardet判斷字符串編碼,超簡單的代碼,應該是對碼農有較大用。
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源代碼文件中不出現中文的話,這個地方怎么設定應該不會問題。
import sys
reload(sys)
sys.setdefaultencoding('UTF-8')
文件編碼:文本的編碼方式,linux下vim利用setfileencoding查看。
一般情況下輸出亂碼的原因就是沒有按照系統解碼的方式進行編碼。
比如prints,s類型為str,linux系統下系統默認編碼為utf8編碼,s在輸出前就應該編碼為utf8。如果s為gbk編碼就應該這樣輸出。prints.decode('gbk').encode('utf8')才能輸出中文。
window下面情況相同,window默認編碼為gbk編碼,所以s輸出前必須編碼為gbk。
python處理中一般處理unicode類型。這樣輸出前直接編碼即可。