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操作Elasticsearch数据索引的教程
Apr 08 Python
python实现从字典中删除元素的方法
May 04 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
Sep 25 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
python中退出多层循环的方法
Nov 27 Python
Python实现将多个空格换为一个空格.md的方法
Dec 20 Python
python 读取文件并把矩阵转成numpy的两种方法
Feb 12 Python
pow在python中的含义及用法
Jul 11 Python
Python os模块常用方法和属性总结
Feb 20 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 Python
简单了解如何封装自己的Python包
Jul 08 Python
python中__slots__节约内存的具体做法
Jul 04 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
php源码的安装方法和实例
2019/09/26 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
2019/10/08 PHP
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
js 调整select 位置的函数
2008/02/21 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
2014/06/20 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
python基础练习之几个简单的游戏
2017/11/10 Python
python实现linux下抓包并存库功能
2018/07/18 Python
python调用摄像头显示图像的实例
2018/08/03 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
使用python+poco+夜神模拟器进行自动化测试实例
2020/04/23 Python
python 获取计算机的网卡信息
2021/02/18 Python
Html5之title吸顶功能
2018/06/04 HTML / CSS
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
金智子午JAVA面试题
2015/09/04 面试题
Laravel中Kafka的使用详解
2021/03/24 PHP
学术会议邀请函范文
2014/01/22 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
Redis读写分离搭建的完整步骤
2021/09/14 Redis
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL