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程序设计入门(5)类的使用简介
Jun 16 Python
Python爬虫:通过关键字爬取百度图片
Feb 17 Python
Python微信库:itchat的用法详解
Aug 14 Python
Python使用cx_Oracle调用Oracle存储过程的方法示例
Oct 07 Python
python按行读取文件,去掉每行的换行符\n的实例
Apr 19 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
Jun 13 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
python数据预处理方式 :数据降维
Feb 24 Python
python实现与redis交互操作详解
Apr 21 Python
Python异常处理机制结构实例解析
Jul 23 Python
Django一小时写出账号密码管理系统
Apr 29 Python
python基于tkinter实现gif录屏功能
May 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
详解php中 === 的使用
2016/10/24 PHP
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
2018/01/20 Javascript
在vue-cli项目中使用bootstrap的方法示例
2018/04/21 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
2011/03/13 Python
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Python实现的密码强度检测器示例
2017/08/23 Python
python实现比较文件内容异同
2018/06/22 Python
使用python批量化音乐文件格式转换的实例
2019/01/09 Python
python实现超市商品销售管理系统
2019/11/22 Python
python打印异常信息的两种实现方式
2019/12/24 Python
Python 列表的清空方式
2020/01/13 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
英国最大的户外商店:Go Outdoors
2019/04/17 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
环境科学专业研究生求职信
2013/10/02 职场文书
大学生个人实习的自我评价
2014/02/15 职场文书
读书活动总结范文
2014/04/26 职场文书
行政求职信
2014/07/04 职场文书
人事专员岗位说明书
2014/07/29 职场文书
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
六年级学生期末评语
2014/12/26 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书