Python核心發(fā)布中的代碼必須始終使用ASCII或Latin-1編碼(又名 ISO-8859-1),使用ASCII的文件不必有編碼cookie,Latin-1僅當注釋或文檔字符串涉及作者名字需要Latin-1時才被使用:
另外使用\x轉義字符是在字符串中包含非ASCII(non-ASCII)數(shù)據(jù)的首選方法。
作為PEP 263實現(xiàn)代碼的測試套件的部分文件是個例外。
最近利用python抓取一些網(wǎng)上的數(shù)據(jù),遇到了編碼的問題。非常頭痛,總結一下用到的解決方案。
linux中vim下查看文件編碼的命令 set fileencoding
python中一個強力的編碼檢測包 chardet ,使用方法非常簡單。linux下利用pip install chardet實現(xiàn)簡單安裝
1 2 3 4 | importchardet f =open('file','r') fencoding=chardet.detect(f.read()) printfencoding |
fencoding輸出格式{'confidence': 0.96630842899499614, 'encoding': 'GB2312'} ,只能判斷是否為某種編碼的概率。比較準確的結果了。輸入?yún)?shù)為str類型。
了解python中str的編碼后可以利用decode和encode來實現(xiàn)編碼的轉換。
一般流程是str利用decode方法根據(jù)str的編碼將其解碼為unicode字符串類型,然后利用encode根據(jù)特定的編碼將unicode字符串類型轉換為特定的編碼。python中str和unicode屬于兩種不同的類型,如下。
一般情況下window默認編碼gbk,linux默認編碼utf8
python編程中系統(tǒng)編碼,python編碼,文件編碼 的概念。
系統(tǒng)編碼:默認寫源碼的編輯器的編碼方式。它代表源碼文件內的所有內容都是根據(jù)詞方式編碼成二進制碼流。存入到磁盤中的。linux下通過locale命令查看。
python編碼:指python內設置的解碼方式。如果不設定的話,python默認的是ascii解碼方式。如果python源代碼文件中不出現(xiàn)中文的話,這個地方怎么設定應該不會問題。
設定方法:在源碼文件開頭(一定是第一行):#-*-coding:UTF-8-*-,源碼文件的設置解碼方式是UTF-8 或者
1 2 3 | importsys reload(sys) sys.setdefaultencoding('UTF-8') |
文件編碼:文本的編碼方式,linux下vim利用set fileencoding查看。
一般情況下輸出亂碼的原因就是 沒有按照系統(tǒng)解碼的方式進行編碼。
比如print s, s類型為str,linux系統(tǒng)下系統(tǒng)默認編碼為utf8編碼,s在輸出前就應該編碼為utf8。如果s為gbk編碼就應該這樣輸出。print s.decode('gbk').encode('utf8')才能輸出中文。
window下面情況相同,window默認編碼為gbk編碼,所以s輸出前必須編碼為gbk。
python處理中一般處理unicode類型。這樣輸出前直接編碼即可。