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爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 Python
Python定时任务sched模块用法示例
Jul 16 Python
python中while和for的区别总结
Jun 28 Python
用vue.js组件模拟v-model指令实例方法
Jul 05 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
Aug 13 Python
tesserocr与pytesseract模块的使用方法解析
Aug 30 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
Pycharm配置PyQt5环境的教程
Apr 02 Python
Python3读写ini配置文件的示例
Nov 06 Python
python3实现Dijkstra算法最短路径的实现
May 12 Python
Python音乐爬虫完美绕过反爬
Aug 30 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 strncasecmp字符串比较的小技巧
2011/01/04 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
php解析xml 的四种简单方法(附实例)
2016/07/11 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
js ondocumentready onmouseover onclick onmouseout 样式
2010/07/22 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
js实现身份证号码验证的简单实例
2014/02/19 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
JQuery替换DOM节点的方法
2015/06/11 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
2016/08/08 Javascript
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
Angularjs中数据绑定的实例详解
2017/08/25 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
Python中的exec、eval使用实例
2014/09/23 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
机器学习python实战之手写数字识别
2017/11/01 Python
python学生管理系统代码实现
2020/04/05 Python
15行Python代码实现网易云热门歌单实例教程
2019/03/10 Python
python求绝对值的三种方法小结
2019/12/04 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
如何在pycharm中安装第三方包
2020/10/27 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
Brydge英国:适用于Apple iPad和Microsoft Surface Pro的蓝牙键盘
2019/05/16 全球购物
出纳岗位职责范本
2015/03/31 职场文书
最感人的道歉情书
2015/05/12 职场文书