python 編碼

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的字符引用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章