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 相关文章推荐
举例讲解Django中数据模型访问外键值的方法
Jul 21 Python
使用FastCGI部署Python的Django应用的教程
Jul 22 Python
Python3安装Pymongo详细步骤
May 26 Python
python 查找文件名包含指定字符串的方法
Jun 05 Python
解决python3捕获cx_oracle抛出的异常错误问题
Oct 18 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
Jul 01 Python
python使用tomorrow实现多线程的例子
Jul 20 Python
pycharm 关掉syntax检查操作
Jun 09 Python
PyTorch如何搭建一个简单的网络
Aug 24 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 Python
Python打包exe时各种异常处理方案总结
May 18 Python
Python实现列表拼接和去重的三种方式
Jul 02 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世纪万年历
2006/12/06 PHP
php中iconv函数使用方法
2008/05/24 PHP
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
PHP基于单例模式实现的数据库操作基类
2016/01/15 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
2019/12/03 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
简洁Ajax函数处理(示例代码)
2013/11/15 Javascript
JavaScript中的逻辑判断符&&、||与!介绍
2014/12/31 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
2016/08/26 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
babel的使用及安装配置教程
2018/02/22 Javascript
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
jQuery实现点击滚动到指定元素上的方法分析
2020/03/19 jQuery
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
python中pygame模块用法实例
2014/10/09 Python
Python3搜索及替换文件中文本的方法
2015/05/22 Python
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
Python pandas常用函数详解
2018/02/07 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
Python enumerate函数遍历数据对象组合过程解析
2019/12/11 Python
Django实现celery定时任务过程解析
2020/04/21 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
介绍一下Transact-SQL中SPACE函数的用法
2015/09/01 面试题
挖掘机司机岗位职责
2014/02/12 职场文书
高中军训的心得体会
2014/09/01 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
2015年电信员工工作总结
2015/05/26 职场文书
转学证明范本
2015/06/19 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL