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使用BeautifulSoup分页网页中超链接的方法
Apr 04 Python
MySQL适配器PyMySQL详解
Sep 20 Python
详解python3中zipfile模块用法
Jun 18 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
Jun 27 Python
python实现从pdf文件中提取文本,并自动翻译的方法
Nov 28 Python
利用Python实现原创工具的Logo与Help
Dec 03 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
Dec 14 Python
python对象与json相互转换的方法
May 07 Python
python保存log日志,实现用log日志画图
Dec 24 Python
python识别验证码图片实例详解
Feb 17 Python
安装Anaconda3及使用Jupyter的方法
Oct 27 Python
python中的class_static的@classmethod的巧妙用法
Jun 22 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
mysql5详细安装教程
2007/01/15 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
2018/05/24 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
jquery ready()的几种实现方法小结
2010/06/18 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
Nodejs封装类似express框架的路由实例详解
2020/01/05 NodeJs
让Vue响应Map或Set的变化操作
2020/11/11 Javascript
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
Pycharm 设置自定义背景颜色的图文教程
2018/05/23 Python
python实现电脑自动关机
2018/06/20 Python
Python坐标线性插值应用实现
2019/11/13 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
彪马英国官网:PUMA英国
2019/02/11 全球购物
一套PHP的笔试题
2013/05/31 面试题
会计学应届毕业生推荐信
2013/11/04 职场文书
测绘工程个人的自我评价
2013/11/10 职场文书
给老婆的保证书范文
2014/04/28 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
工作后的感想
2015/08/07 职场文书
Python如何导出导入所有依赖包详解
2021/06/08 Python