encode和decode
python2默認的編碼是ascii,通過encode可以將對象的編碼轉換爲指定編碼格式(稱作“編碼”),而decode是這個過程的逆過程(稱作“解碼”)。
錯誤信息:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
開始分析:
相同編碼比較:
>>> a="你好"
>>> b="你好"
>>> print a==b
True
不同編碼的比較:
>>> a="你好"
>>> b=u"你好"
>>> print a==b
__main__:1: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal False
decode的用法
>>> print a.decode('utf-8')==b
>>> print a.decode('utf-8')==b
>>> print a.decode('utf-8')==b
錯誤信息:UnicodeDecodeError: ‘XXX’ codec can’t decode bytes in position 2-5: illegal multibyte sequence
這是因爲遇到了非法字符,例如:全角空格往往有多種不同的實現方式,比如\xa3\xa0,或者\xa4\x57,
這些字符,看起來都是全角空格,但它們並不是“合法”的全角空格 真正的全角空格是\xa1\xa1,因此在轉碼的過程中出現了異常。
[解決辦法] 將獲取的字符串strTxt做decode時,指明ignore,會忽略非法字符,
當然對於gbk等編碼,處理同樣問題的方法是類似的
strTest = strTxt.decode('utf-8', 'ignore')
return strTest
[補充] 默認的參數就是strict,代表遇到非法字符時拋出異常; 如果設置爲ignore,則會忽略非法字符;
如果設置爲replace,則會用?號取代非法字符; 如果設置爲xmlcharrefreplace,則使用XML的字符引用。