pythonjson.dumps中⽂乱码问题解决
json.dumps(var,ensure_ascii=False)并不能解决中⽂乱码的问题
json.dumps在不同版本的Python下会有不同的表现,注意下⾯提到的中⽂乱码问题在Python3版本中不存在。
注:下⾯的代码再python 2.7版本下测试通过
# -*- coding: utf-8 -*-
odata = {'a' : '你好'}
print odata
结果:
{'a': ' e4 bd a0 e5 a5 bd'}
print json.dumps(odata)
结果:
{"a": "\u4f60\u597d"}
print json.dumps(odata,ensure_ascii=False)
结果:
{"a": "浣犲ソ"}
print json.dumps(odata,ensure_ascii=False).decode('utf8').encode('gb2312')
结果:
{"a": "你好"}
要解决中⽂编码,需要知道python2.7对字符串是怎么处理的:
由于# -- coding: utf-8 --的作⽤,⽂件内容以utf-8编码,所以print odata
输出的是utf-8编码后的结果{‘a': ‘ e4 bd a0 e5 a5 bd'}
json.dumps 序列化时对中⽂默认使⽤的ascii编码, print json.dumps(odata)输出unicode编码的结果
print json.dumps(odata,ensure_ascii=False)不使⽤的ascii编码,以gbk编码
‘你好' ⽤utf8编码是 %E4%BD%A0%E5%A5%BD ⽤gbk解码是浣犲ソ
字符串在Python内部的表⽰是unicode编码。
因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另⼀种编码。
decode的作⽤是将其他编码的字符串转换成unicode编码
python json字符串转数组decode('utf-8')表⽰将utf-8编码的字符串转换成unicode编码。
encode的作⽤是将unicode编码转换成其他编码的字符串
encode(‘gb2312'),表⽰将unicode编码的字符串转换成gb2312编码。
python3中没有这种问题,所以最简单的⽅法是引⼊__future__模块,把新版本的特性导⼊到当前版本
from __future__ import unicode_literals
print json.dumps(odata,ensure_ascii=False)
结果:
{"a": "你好"}
在写⼊⽂件的时候出现了Python2.7的UnicodeEncodeError: ‘ascii' codec can't encode异常错误
⼤神的解决⽅法:
不使⽤open打开⽂件,⽽使⽤codecs:
from __future__ import unicode_literals
import codecs
fp = codecs.open('', 'a+', 'utf-8')
fp.write(json.dumps(m,ensure_ascii=False))
fp.close()
到此这篇关于python json.dumps中⽂乱码问题解决的⽂章就介绍到这了,更多相关python json.dumps中⽂乱码内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论