最近做项目时碰到许多python的编解码问题,特此总结一下。
1. 首先如果你在python文件中需要使用到一些除ascii以外的特殊字符,则需要申明#coding:utf8等,你也可以在中间加上一些其他字符,但是python本身只检测#和coding以及编码字符串。如果你声明这句以后,你在python文件中使用的特殊字符则默认以这种方式编码。编码字符串是不区分大小写的,所以utf8和UTF8,Utf-8都是没有区别的。
#coding: UTF-8
2. python当中默认的编码格式是Unicode,然后如果你想要将一种字符转换成另一种字符是不能直接转换的,而是先应该使用decode函数将特殊编码转换成Unicode,然后将Unicode再转换成另一种字符,比如将GBK转换成utf8.
str.decode(‘gbk‘).encode(‘utf-8‘)
3. 有时候我们会遇到一个问题就是当你将一个字符串解码成Unicode时,有些特殊字符是无法转换的,这时你可以在decode中加入参数‘ignore‘,代表你忽视此参数的转换。
str.decode(‘gbk‘, ‘ignore‘).encode(‘utf-8‘)
4. 有时候默认做一些string处理时,python会默认把字符串转换成Unicode形式,所以会碰到3所指的问题,就是有些特殊字符不能转换(然后报错),但是你又希望以后继续使用原有编码格式的字符,咋办呢?先手动转换成Unicode,再encode成原有格式,则python做默认转换成Unicode处理时就不会报错了。
str.decode(‘utf-8‘,‘ignore‘).encode(‘uft-8‘)
5. 当一个字符串中包含两种编码字符时最好用4所使用的方式先转换一下,以防出现意想不到的bug。