天天看點

python預設編碼_python的編碼問題

python預設編碼_python的編碼問題

對于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往往導緻報錯。