python UnicodeDecodeError问题

我的python版本是:写了一个python脚本,try.py运行之后出现如下错误:尝试了各种方法如下:1、try.py文件的首行添加了#-*-coding:utf-8-... 我的python版本是:

写了一个python脚本,try.py运行之后出现如下错误:

尝试了各种方法如下:
1、try.py文件的首行添加了#-*- coding:utf-8 -*-,运行还是出错
2、尝试修改设置默认编码方式,在try.py中添加如下代码:
import sys
reload(sys)
sys.setdefaultencoding('utf8')
运行之后还是一样的问题。
3、运行完try.py的时候,我又进行了如下的操作,得到了如下的结果:

这是怎么回事?是不是设置了默认的编码方式没有成功啊?
请问谁能给我指点指点呀!谢谢!
展开
 我来答
frostfish425
2013-09-27 · TA获得超过124个赞
知道小有建树答主
回答量:190
采纳率:0%
帮助的人:121万
展开全部

python的中文编码比较容易采坑,主要有一下几个注意点:


  1. 明确读取的是什么编码格式的输入 gb18030,还是utf-8,,如果不是从文件中来,而是代码内的中文字符,最好直接 u'中文',将编码变为 unicode

  2. 操作的时候,注意各种字符串的编码方式匹配,可以都转为unicode以统一处理,string.decode('gb18030') 可以把 gb18030编码转换为 unicode编码

  3. 输出时,明确最终的输出格式是什么,从而采用正确的 encode 方式进行编码

  4. 至于json,在load的时候,注意设定编码方式, json.loads(str, encoding='gb18030') 或者 utf-8


如果按照这个原则解决不了,可以考虑贴代码

追问
怎么知道读取的是什么编码格式呢?
追答

这个有挺多方法的,例举两个


windows下:

  1. 用 UltraEdit 等牛逼点的编辑器打开数据文件,点击 文件 -> 转换,看能出什么选项,如果是 ascii 到 utf-8 的转换选项,说明原来就是 gbk编码的,反之则说明是 utf-8编码的

  2. 在eclipse中打开文件,事先查看你eclipse用的是什么编码方式,如果打开能正常显示,说明是eclipse正在用的编码方式,如果显示乱码,则改变eclipse编码方式,直到能正常显示

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
daweileo
2013-09-27 · TA获得超过275个赞
知道小有建树答主
回答量:121
采纳率:100%
帮助的人:158万
展开全部
json.loads(s[,
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当然要一致

就好比给你个德语,你要当英语来翻译,肯定没法通
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式