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 中 Meta Classes详解
Feb 13 Python
浅析Python 中整型对象存储的位置
May 16 Python
python如何修改装饰器中参数
Mar 20 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
Apr 27 Python
python 获取页面表格数据存放到csv中的方法
Dec 26 Python
python+pyqt5实现24点小游戏
Jan 24 Python
python实现手机销售管理系统
Mar 19 Python
解决python flask中config配置管理的问题
Jul 26 Python
解决Python Matplotlib绘图数据点位置错乱问题
May 16 Python
keras load model时出现Missing Layer错误的解决方式
Jun 11 Python
python3将变量输入的简单实例
Aug 19 Python
浅析pandas随机排列与随机抽样
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 csv操作类代码
2009/12/14 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
2012/07/31 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
比较完整的微信开发php代码
2016/08/02 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
PHP实现发送微博消息功能完整示例
2019/12/04 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
javascript实现画板功能
2020/04/12 Javascript
解决Vue中使用keepAlive不缓存问题
2020/08/04 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
Python简单进程锁代码实例
2015/04/27 Python
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
python分布式编程实现过程解析
2019/11/08 Python
基于python实现可视化生成二维码工具
2020/07/08 Python
python 第三方库paramiko的常用方式
2021/02/20 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
大班开学家长寄语
2014/04/04 职场文书
音乐教师求职信
2014/06/28 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
个人总结与自我评价
2015/02/14 职场文书
个人工作决心书
2015/09/22 职场文书