python UnicodeDecodeError问题
写了一个python脚本,try.py运行之后出现如下错误:
尝试了各种方法如下:
1、try.py文件的首行添加了#-*- coding:utf-8 -*-,运行还是出错
2、尝试修改设置默认编码方式,在try.py中添加如下代码:
import sys
reload(sys)
sys.setdefaultencoding('utf8')
运行之后还是一样的问题。
3、运行完try.py的时候,我又进行了如下的操作,得到了如下的结果:
这是怎么回事?是不是设置了默认的编码方式没有成功啊?
请问谁能给我指点指点呀!谢谢! 展开
python的中文编码比较容易采坑,主要有一下几个注意点:
明确读取的是什么编码格式的输入 gb18030,还是utf-8,,如果不是从文件中来,而是代码内的中文字符,最好直接 u'中文',将编码变为 unicode
操作的时候,注意各种字符串的编码方式匹配,可以都转为unicode以统一处理,string.decode('gb18030') 可以把 gb18030编码转换为 unicode编码
输出时,明确最终的输出格式是什么,从而采用正确的 encode 方式进行编码
至于json,在load的时候,注意设定编码方式, json.loads(str, encoding='gb18030') 或者 utf-8
如果按照这个原则解决不了,可以考虑贴代码
怎么知道读取的是什么编码格式呢?
这个有挺多方法的,例举两个
windows下:
用 UltraEdit 等牛逼点的编辑器打开数据文件,点击 文件 -> 转换,看能出什么选项,如果是 ascii 到 utf-8 的转换选项,说明原来就是 gbk编码的,反之则说明是 utf-8编码的
在eclipse中打开文件,事先查看你eclipse用的是什么编码方式,如果打开能正常显示,说明是eclipse正在用的编码方式,如果显示乱码,则改变eclipse编码方式,直到能正常显示
encoding[, cls[, object_hook[,
parse_float[, parse_int[, parse_constant[,
object_pairs_hook[, **kw]]]]]]]])
Deserialize s (a str or unicode instance containing a JSON document) to a
Python object.
If s is a str instance and is encoded with an ASCII based
encoding other than UTF-8 (e.g. latin-1), then an appropriate encoding
name must be specified. Encodings that are not ASCII based (such as UCS-2) are
not allowed and should be decoded to unicode first.
如果s是str并且是基于ASCII 编码而不是UTF-8编码的话,则必须指定相应的编码;
试试加个编码看看
json.loads(str, encoding='gbk')
至于改默认编码,脚本里改的也只影响它的运行,重新在命令行中Import,肯定还是原来的样子
如果要彻底改
python的路径中,找到site-packages目录,在此目录中建立一个sitecustomize.py文件,设置相应的权限。文件的内容如下:
import sys
sys.setdefaultencoding("utf-8")
这样json.loads(str, encoding='gbk')是对的,但是为什么json.loads(str, encoding='utf-8')这样就是错的呢?
因为原字符串是按照gbk来encode的,json.loads需要将其decode;
两边的编码方式,也就是encoding当然要一致
就好比给你个德语,你要当英语来翻译,肯定没法通