python json.dumps中文乱码问题解决


Posted in Python onApril 01, 2020

json.dumps(var,ensure_ascii=False)并不能解决中文乱码的问题

json.dumps在不同版本的Python下会有不同的表现, 注意下面提到的中文乱码问题在Python3版本中不存在。

注:下面的代码再python 2.7版本下测试通过

# -*- coding: utf-8 -*-
odata = {'a' : '你好'}
print odata

结果:

{'a': '\xe4\xbd\xa0\xe5\xa5\xbd'}

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': ‘\xe4\xbd\xa0\xe5\xa5\xbd'}

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解码是 浣?濂?/p>

字符串在Python内部的表示是unicode编码。

因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

decode的作用是将其他编码的字符串转换成unicode编码

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('output.txt', 'a+', 'utf-8')
fp.write(json.dumps(m,ensure_ascii=False))
fp.close()

到此这篇关于python json.dumps中文乱码问题解决的文章就介绍到这了,更多相关python json.dumps中文乱码内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python去除字符串两端空格的方法
May 21 Python
详解python单例模式与metaclass
Jan 15 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
Apr 17 Python
解决python 无法加载downsample模型的问题
Oct 25 Python
PyTorch和Keras计算模型参数的例子
Jan 02 Python
python3爬取torrent种子链接实例
Jan 16 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
May 13 Python
浅谈Python中的模块
Jun 10 Python
python GUI计算器的实现
Oct 09 Python
Python中Yield的基本用法
Oct 18 Python
Python tkinter之Bind(绑定事件)的使用示例
Feb 05 Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 Python
Django Admin后台添加数据库视图过程解析
Apr 01 #Python
pyqt5中动画的使用详解
Apr 01 #Python
django项目中新增app的2种实现方法
Apr 01 #Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 #Python
django API 中接口的互相调用实例
Apr 01 #Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
Apr 01 #Python
Python greenlet和gevent使用代码示例解析
Apr 01 #Python
You might like
PHP安全技术之 实现php基本安全
2010/09/04 PHP
php学习之 循环结构实现代码
2011/06/09 PHP
php一些错误处理的方法与技巧总结
2013/08/10 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
js检测客户端不是firefox则提示下载
2007/04/07 Javascript
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
微信小程序时间选择插件使用详解
2018/12/28 Javascript
mock.js模拟前后台交互
2019/07/25 Javascript
解决vuex刷新状态初始化的方法实现
2019/08/15 Javascript
Vue路由守卫之路由独享守卫
2019/09/25 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
python将unicode转为str的方法
2017/06/21 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
2018/12/16 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
python实现计算器功能
2019/10/31 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
荣耀商城:HIHONOR
2020/11/03 全球购物
文史专业毕业生自荐信
2013/11/17 职场文书
毕业生求职的求职信
2013/12/05 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
垃圾桶标语
2014/06/24 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
办理信用卡工作证明
2014/09/30 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
生日赠语
2015/06/23 职场文书
婚礼伴郎致辞
2015/07/28 职场文书