程序地带

python json.dumps中文乱码问题解决


json.dumps(var,ensure_ascii=False)并不能解决中文乱码的问题


json.dumps在不同版本的Python下会有不同的表现, 注意下面提到的中文乱码问题在Python3版本中不存在。


注:下面的代码再python 2.7版本下测试通过


1

2

3

# -*- coding: utf-8 -*-

odata = {'a' : '你好'}

print odata


结果:


1

{'a': 'xe4xbdxa0xe5xa5xbd'}


1

print json.dumps(odata)


结果:


1

{"a": "u4f60u597d"}


1

print json.dumps(odata,ensure_ascii=False)


结果:


1

{"a": "浣犲ソ"}


1

print json.dumps(odata,ensure_ascii=False).decode('utf8').encode('gb2312')


结果:


1

{"a": "你好"}


要解决中文编码,需要知道python2.7对字符串是怎么处理的:


由于# -- coding: utf-8 --的作用,文件内容以utf-8编码,所以print odata 


输出的是utf-8编码后的结果{‘a’: ‘xe4xbdxa0xe5xa5xbd’}


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解码是 浣犲ソ


字符串在Python内部的表示是unicode编码。


因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。


decode的作用是将其他编码的字符串转换成unicode编码


decode(’utf-8’)表示将utf-8编码的字符串转换成unicode编码。


encode的作用是将unicode编码转换成其他编码的字符串


encode(‘gb2312’),表示将unicode编码的字符串转换成gb2312编码。


python3中没有这种问题,所以最简单的方法是引入__future__模块,把新版本的特性导入到当前版本


1

2

from __future__ import unicode_literals

print json.dumps(odata,ensure_ascii=False)


结果:


1

{"a": "你好"}


在写入文件的时候出现了Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误


大神的解决方法: 


不使用open打开文件,而使用codecs:


1

2

3

4

5

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()


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jialiang8542/article/details/112760997

随机推荐

爬虫之初识

什么是爬虫?通过编写代码,模拟浏览器发送请求,让其去网络上抓去数据的过程。爬虫分类?通用爬虫抓取整张网页的全部内容聚焦爬虫抓取一张页面的部分内容通用爬虫和聚焦...

chinaherolts2008 阅读(298)

如何隐藏自己电脑的私密文件

cmd命令窗口copy1.jpg/d+2.zip=3.jpg执行完生成的3.jpg可正常打开改后缀名为zip即可查看自己的zip包下内容。...

YangzaiBob 阅读(883)

L3-1 那就别担心了 (30分)

这是今年天梯赛的一道题,当时L2的题一道都没过,这道L3的题自然也没看。赛后看了看,感觉蛮有意思,试着做了做。起初想到的思路是:D...

m0_50548918 阅读(129)

sumo学习——sumo的路网介绍

sumo学习——sumo的路网介绍

2sumo路网这里的记录的内容,并不以如何绘制或者如何建立一个路网体系为主,而是较为详细的介绍,在sumo中是如何定义路网格式的。这里所有的内容都是来自于su...

wangxin_studying 阅读(586)

5安卓输入法键盘显示 搜索_日语输入法怎么用?

5安卓输入法键盘显示 搜索_日语输入法怎么用?

电脑上常用的日语输入法包括微软IME日语输入法、谷歌日语输入法、百度日语输入法;手机上常用的日语输入法包括谷歌手机日语输入法、Simeji日语输入法、PlusJ松茸日语输入法等。【各种输...

weixin_39577964 阅读(609)

css闪烁字体点击出现文字

http://cmq521.com/wj/onclick.html 链接效果。 <!DOCTYPEhtml><html>   <head>      <met...

蓝色最有调 阅读(346)