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常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
Python中MySQL数据迁移到MongoDB脚本的方法
Apr 28 Python
Python 类与元类的深度挖掘 I【经验】
May 06 Python
Python正则表达式完全指南
May 25 Python
python中的set实现不重复的排序原理
Jan 24 Python
python实现Adapter模式实例代码
Feb 09 Python
浅析Python装饰器以及装饰器模式
May 28 Python
Python批量查询关键词微信指数实例方法
Jun 27 Python
python射线法判断一个点在图形区域内外
Jun 28 Python
python实现串口自动触发工作的示例
Jul 02 Python
如何基于Python创建目录文件夹
Dec 31 Python
Python利用FFT进行简单滤波的实现
Feb 26 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实现登陆验证码(类似条行码状)
2006/10/09 PHP
PHP 得到根目录的 __FILE__ 常量
2008/07/23 PHP
yii框架源码分析之创建controller代码
2011/06/28 PHP
PHP使用数组实现矩阵数学运算的方法示例
2017/05/29 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
Js 本页面传值实现代码
2009/05/17 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
javascript获取网页宽高方法汇总
2015/07/19 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
bootstrap日期控件问题(双日期、清空等问题解决)
2017/04/19 Javascript
利用n工具轻松管理Node.js的版本
2017/04/21 Javascript
JavaScript创建对象的七种方式(推荐)
2017/06/26 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
pytorch+lstm实现的pos示例
2020/01/14 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
农村文化建设标语
2014/10/07 职场文书
小学师德师风整改措施
2014/10/27 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
无工作证明怎么写
2015/06/15 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
2019新学期家长会工作计划
2019/08/21 职场文书
SQL中的三种去重方法小结
2021/11/01 SQL Server
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL