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中time()方法的使用的教程
May 22 Python
python实现mysql的单引号字符串过滤方法
Nov 14 Python
Python处理XML格式数据的方法详解
Mar 21 Python
Python实现的计数排序算法示例
Nov 29 Python
TensorFlow深度学习之卷积神经网络CNN
Mar 09 Python
python使用RNN实现文本分类
May 24 Python
python 函数内部修改外部变量的方法
Dec 18 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
Dec 19 Python
Python3 pandas 操作列表实例详解
Sep 23 Python
Python变量作用域LEGB用法解析
Feb 04 Python
Python私有属性私有方法应用实例解析
Sep 15 Python
python 星号(*)的多种用途
Sep 21 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
PHPThumb图片处理实例
2014/05/03 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
2014/11/04 PHP
PHP用户注册邮件激活账户的实现代码
2017/05/31 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
ES6实现的遍历目录函数示例
2017/04/07 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
python文件名和文件路径操作实例
2017/09/29 Python
python3大文件解压和基本操作
2017/12/15 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
Python3多线程基础知识点
2019/02/19 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
python同时遍历两个list用法说明
2020/05/02 Python
Python数据可视化图实现过程详解
2020/06/12 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
pytorch 把图片数据转化成tensor的操作
2021/03/04 Python
CSS3中border-radius属性设定圆角的使用技巧
2016/05/10 HTML / CSS
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
美体小铺美国官网:The Body Shop美国
2017/11/10 全球购物
工程部经理岗位职责
2013/12/08 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
2015年度物流工作总结
2015/04/30 职场文书
庭外和解协议书
2016/03/23 职场文书
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python