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使用xlrd模块读写Excel文件的方法
May 06 Python
Python实现文件按照日期命名的方法
Jul 09 Python
python随机数分布random测试
Aug 27 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
python使用rsa非对称加密过程解析
Dec 28 Python
python 实现从高分辨图像上抠取图像块
Jan 02 Python
python实现PCA降维的示例详解
Feb 24 Python
基于Python的OCR实现示例
Apr 03 Python
Anaconda+vscode+pytorch环境搭建过程详解
May 25 Python
Python叠加矩形框图层2种方法及效果
Jun 18 Python
Django DRF APIView源码运行流程详解
Aug 17 Python
Python与C/C++的相互调用案例
Mar 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
PHP小程序自动提交到自助友情连接
2009/11/24 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
2016/05/04 PHP
php代码检查代理ip的有效性
2016/08/19 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
javascript,jquery闭包概念分析
2010/06/19 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
nodejs实现遍历文件夹并统计文件大小
2015/05/28 NodeJs
require.js的用法详解
2015/10/20 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
微信小程序当前时间时段选择器插件使用方法详解
2018/12/28 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
[02:06]2018完美世界全国高校联赛秋季赛开始报名(附彩蛋)
2018/09/03 DOTA
python简单实现刷新智联简历
2016/03/30 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
Django csrf 验证问题的实现
2018/10/09 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
python用requests实现http请求代码实例
2019/10/31 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
Python self用法详解
2020/11/28 Python
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
25道Java面试题集合
2013/05/21 面试题
3的组成教学反思
2014/04/30 职场文书
农民工预备党员思想汇报
2014/09/14 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
2014年个人总结范文
2015/03/09 职场文书