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实现子类调用父类的方法
Nov 10 Python
总结Python编程中函数的使用要点
Mar 20 Python
python 循环遍历字典元素的简单方法
Sep 11 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
Jul 06 Python
python http接口自动化脚本详解
Jan 02 Python
python使用tornado实现简单爬虫
Jul 28 Python
python的concat等多种用法详解
Nov 28 Python
详解python算法之冒泡排序
Mar 05 Python
tensorflow 只恢复部分模型参数的实例
Jan 06 Python
基于matplotlib xticks用法详解
Apr 16 Python
Python urllib.request对象案例解析
May 11 Python
python爬虫分布式获取数据的实例方法
Nov 26 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
人族 TERRAN 概述
2020/03/14 星际争霸
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
PHP中创建图像并绘制文字的例子
2014/11/19 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
2016/11/05 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
js实现获取当前时间是本月第几周的方法
2015/08/11 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
jquery设置css样式的多种方法(总结)
2017/02/21 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
解决python3读取Python2存储的pickle文件问题
2018/10/25 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
selenium切换标签页解决get超时问题的完整代码
2020/08/30 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
浅谈盘点5种基于Python生成的个性化语音方法
2021/02/05 Python
CSS3图片旋转特效(360/60/-360度)
2013/10/10 HTML / CSS
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
法律专业应届生自荐信范文
2014/01/06 职场文书
2014年协会工作总结
2014/11/22 职场文书
管理失职检讨书范文
2015/05/05 职场文书
会议主持人开场白台词
2015/05/28 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
阿里云服务器Ubuntu 20.04上安装Odoo 15
2022/05/20 Servers
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android