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双向链表实现实例代码
Nov 21 Python
python将文本转换成图片输出的方法
Apr 28 Python
Python 制作糗事百科爬虫实例
Sep 22 Python
python检查URL是否正常访问的小技巧
Feb 25 Python
利用python操作SQLite数据库及文件操作详解
Sep 22 Python
python机器学习实战之最近邻kNN分类器
Dec 20 Python
致Python初学者 Anaconda入门使用指南完整版
Apr 05 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
Dec 10 Python
python打印文件的前几行或最后几行教程
Feb 13 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
Mar 06 Python
Python读取文件夹下的所有文件实例代码
Apr 02 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
PHP 读取Postgresql中的数组
2013/04/14 PHP
php无限遍历文件夹示例分享
2014/03/04 PHP
PHP Smarty模版简单使用方法
2016/03/30 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
CI框架表单验证实例详解
2016/11/21 PHP
php输出图像的方法实例分析
2017/02/16 PHP
Thinkphp5 自定义上传文件名的实现方法
2019/07/23 PHP
select 控制网页内容隐藏于显示的实现代码
2010/05/25 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
用原生JavaScript实现jQuery的$.getJSON的解决方法
2013/05/03 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
Node.js读取文件内容示例
2017/03/07 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
Python深入学习之内存管理
2014/08/31 Python
Python读写文件方法总结
2015/06/09 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
Html5之title吸顶功能
2018/06/04 HTML / CSS
餐厅采购员岗位职责
2014/03/06 职场文书
实习协议书范本
2014/04/22 职场文书
五心教育心得体会
2014/09/04 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
2015年科室工作总结
2015/04/10 职场文书
公司开业主持词
2015/07/02 职场文书
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android