![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICMGBzQwAzMwkDR5MDO2MENBhTN0MzMzUDNxY0QzM0Qw0zcmAzN00DamADN20zd-cURQpUPmZSO00DcwFmJzcTM90mZmkDOygTOyAjM4wiM5YjMzIzN5IzM9U3LcRXavwVcuhWe0hjWJFFMwlmazdlTPZzLc12bj5SdklWYi5CMzN3Lc9CX6MHc0RHaiojIsJye.jpg)
對于python2,經常會遇到編碼問題,在此小記一下。
Python2預設的編碼解碼方式是ascii碼,這點要牢記。
windows系統預設是gbk編碼的,可以使用chcp檢視:936,那就是GBK簡體中文
PS G:\wayne-personal\UserInfo> chcp活動代碼頁: 936
在實際編碼過程中,我們會用到很多中文,面對python2預設的ASCII編碼,為了不使包含中文的程式報錯,也是為了符合國際通用慣例,一般将我們的檔案編碼設定為utf-8格式。這就是我們一般看到的在檔案首行聲明#-*- coding:utf-8 -*-的原因。
另外,如果在python中進行編碼和解碼的時候,不指定編碼方式,那麼python就會使用defaultencoding。 而python2.x的的defaultencoding是ascii,是以會經常出現'ascii' codec can't encode characters in position 0-4: ordinal not in range(128) 編碼報錯,這時我們可以添加下列代碼指定python的encoding方式:
import sysreload(sys)sys.setdefaultencoding('utf8')
再有一點:在python2中,有兩種不同的字元串資料類型,一種是 “str”對象,存儲着位元組,如果在字元串前使用一個’u’的字首,表示的是這個字元的Unicode碼點,即unicode對象,這是兩種不同的對象,雖然這兩種都可以叫string,但是有時是不一樣的東西,這點需要尤其注意,如果不注意這點會出現常見的UnicodeEncodeError 和 UnicodeDecodeError 異常。
解決辦法是encode與decode:unicode對象-encode→str對象,str對象-decode→unicode對象。其中str指的是位元組流,而str.decode是将位元組流str按給定的解碼方式解碼,并轉換成utf-8形式,u.encode是将unicode類按給定的編碼方式轉換成位元組流str。注意:調用encode方法的是unicode對象,生成的是位元組流;調用decode方法的是str對象(位元組流),生成的是unicode對象。若str對象調用encode會預設先按系統預設編碼方式decode成unicode對象再encode,忽視了中間預設的decode往往導緻報錯。