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中的lstrip()方法使用简介
May 19 Python
自己使用总结Python程序代码片段
Jun 02 Python
利用python求相邻数的方法示例
Aug 18 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
django 修改server端口号的方法
May 14 Python
python如何统计代码运行的时长
Jul 24 Python
python多线程与多进程及其区别详解
Aug 08 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
Apr 08 Python
利用Python如何实时检测自身内存占用
May 09 Python
Python列表推导式实现代码实例
Sep 09 Python
Flask搭建一个API服务器的步骤
May 28 Python
详解如何用Python实现感知器算法
Jun 18 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
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
js chrome浏览器判断代码
2010/03/28 Javascript
jquery判断元素的子元素是否存在的示例代码
2014/02/04 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
js实现StringBuffer的简单实例
2016/09/02 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
JavaScript命令模式原理与用法实例详解
2020/03/10 Javascript
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
[49:43]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
设计师大码女装:11 Honoré
2020/05/03 全球购物
酒店总经理工作职责
2013/12/13 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
银行催款通知书
2015/04/17 职场文书
MySQL不使用order by实现排名的三种思路总结
2021/06/02 MySQL
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android