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使用htmllib分析网页内容的方法
May 08 Python
Python选课系统开发程序
Sep 02 Python
Python常见异常分类与处理方法
Jun 04 Python
Python金融数据可视化汇总
Nov 17 Python
python opencv旋转图像(保持图像不被裁减)
Jul 26 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
Python中的相关分析correlation analysis的实现
Aug 29 Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
Sep 29 Python
Python爬虫之Selenium实现键盘事件
Dec 04 Python
python+opencv实现车道线检测
Feb 19 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
在WIN98下以apache模块方式安装php
2006/10/09 PHP
php生成局部唯一识别码LUID的代码
2012/10/06 PHP
php5.3 注意事项说明
2013/07/01 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
jquery学习笔记二 实现可编辑的表格
2010/04/09 Javascript
菜鸟学习JavaScript小实验之函数引用
2010/11/17 Javascript
二叉树的非递归后序遍历算法实例详解
2014/02/07 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
详谈JavaScript内存泄漏
2014/11/14 Javascript
一个简单不报错的summernote 图片上传案例
2016/07/11 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
使用vue-router在Vue页面之间传递数据的方法
2019/07/15 Javascript
VueJS 取得 URL 参数值的方法
2019/07/19 Javascript
ES6实现图片切换特效代码
2020/01/14 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
Python 中 Meta Classes详解
2016/02/13 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
Python使用Pygame绘制时钟
2020/11/29 Python
什么是类的返射机制
2016/02/06 面试题
军训考核自我鉴定
2014/02/13 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
邀请函范文
2015/02/02 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang
vue生命周期钩子函数以及触发时机
2022/04/26 Vue.js