根本缘由: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等。