根本緣由:python
字符串在Python內部的表示是unicode編碼,所以,在作編碼轉換時,一般須要以unicode 做爲中間編碼,即先將其餘編碼的字符串解碼(decode)成unicode,再從unicode編(encode) 成另外一種編碼。可是,Python 2.x的默認編碼格式是ASCII,就是說,在沒有指定Python源碼編碼 格式的狀況下,源碼中的全部字符都會被默認爲ASCII碼。也由於這個根本緣由,在Python 2.x中 常常會遇到UnicodeDecodeError或者UnicodeEncodeError的異常。
常見的幾種編碼異常
segmentfault
固然,除了上面列出的幾種出現異常的狀況以外還有不少可能出現異常的例子,這裏就不在一一
說明了。編碼
最後分享一個終極原則:spa
decode early, unicode everywhere, encode late,即:在輸入或者聲明字符串的時候, 儘早地使用decode方法將字符串轉化成unicode編碼格式;而後在程序內使用字符串的時候統一使用 unicode格式進行處理,好比字符串拼接、字符串替換、獲取字符串的長度等操做;最後,在輸出字符 串的時候(控制檯/網頁/文件),經過encode方法將字符串轉化爲你所想要的編碼格式,好比utf-8等。