其实刚刚写过一整篇Python编码问题的解决方案,由于JSON又是一种特殊案例(与库相关,与语言本身无关)所以就单独提出来说。

我们来看一个从网上获取json并又存到本地文件的例子

import requests,json

r = requests.get('https://api.github.com/repos/solomonxie/\

solomonxie.github.io/issues/25/comments')

# 获取到我的github中某条issue的所有评论,形式为

comments = json.loads( r.content )

# 取某一条评论查看内容(中文)

cc = comments[0]['body'][0:10] # 取出的内容是'## 配置:先从配置'

然后来测试下变量cc:

image

好,到这里先停一下!

JSON的读取到目前为止,都是正常的:JSON Object对象给出的值都是unicode,没有被莫名转义,也没有报错误。

但是,unicode格式,意味着它和str格式不兼容!

这时,害羞的大姑娘Unicode刚出炉,你不能在这个时候让它和Str操作在一起!

报错也往往就在这种疏于防备的时候!

比如你看:

image

上面打印了三条Unicode和Str的结合,

前两条分别是以Str格式的结合,以Unicode格式的结合。

但是第三条,把两个不同格式的字符串结合,就出错了。

对不起,这里不是Javascript,变量不可以任意交合。Python对变量和编码都是极其谨慎的。

所以明白了这点,我们再继续。

上面获得了JSON Object对象,那么再来试试将JSON对象整体存到文本文件中。

如果要存到本地文件,那么就必须把Object对象转换为Str格式的字符串。

json库自带.dumps()函数可以进行转化。

但是这里问题出现了!我们来小试一下:

image

竟然连print大法都不能把json.dumps()返回的内容正确打印出来。经过各种测试和查看官网对于此函数的文档,发现:

原来json.dumps()是默认所有非ascii码强制转化为代号(而非汉字)的,于repr()效果等同!

官方文档里有说明,json.dumps()里面有个ensure_ascii参数,默认为True。

意思就是默认把所有非ascii字码用\强制转化。所以,为了关闭这个功能,我们必须把它设为False.

下面是个小测试:

image

这样一来JSON在Python里的编码问题就解决了:须用json.dumps(obj, ensure_ascii=False)来转化为字符串

下面是完整的代码测试:

# @网络资源到本地存储真实测试

import requests,json

r = requests.get('https://api.github.com/repos/solomonxie/solomonxie.github.io/issues/25/comments')

# 获取到我的github中某条issue的所有评论,形式为

comments = json.loads( r.content )

outgoing = json.dumps( comments, ensure_ascii=False )

with open('test.txt', 'w') as f:

f.write(outgoing.encode('utf-8'))

with open('test.txt', 'r') as f:

read = f.read()

print read[0:20], type(read)

来看结果:

image

大功告成!

python json dumps utf8_Python2操作JSON出现乱码的解决方案相关推荐

  1. python json dumps 自定义_Python json.dumps 自定义序列化操作

    def login_ajax(request): if request.method == "GET": return render(request, 'login_ajax.ht ...

  2. python json.dumps()函数输出json格式,使用indent参数对json数据格式化输出

    最近使用json.dumps()来输出json数据,发现输出的数据是一行,看着太别扭了,不美观.发现可以使用indent参数来控制 import jsondicts={"name" ...

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

    json.dumps(var,ensure_ascii=False)并不能解决中文乱码的问题 json.dumps在不同版本的Python下会有不同的表现, 注意下面提到的中文乱码问题在Python3 ...

  4. python json.dumps()函数输出json格式,使用ensure_ascii参数对中文输入的支持

    在python使用过程中,输入中文,不能正常的输出,可以使用ensure_ascii参数来解决不能输入中文的问题 代码块: import json friends={"name": ...

  5. python json dumps 自定义_Python json.dumps()用法及代码示例

    JSON的完整形式是JavaScript Object Notation.这意味着将使用编程语言的文本组成的脚本(可执行)文件用于存储和传输数据. Python通过名为内置的软件包支持JSONjson ...

  6. python操作json数据_Python操作JSON数据代码示例

    #!/usr/bin/env python import json import os def json_test(): return_dic = {} json_data = { 'appid':' ...

  7. JSON基础 JS操作JSON总结

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...

  8. php json方法,PHP操作JSON方法大全

    这次给大家带来PHP操作JSON方法大全,PHP操作JSON的注意事项有哪些,下面就是实战案例,一起来看一下. 首先定义一个数组,然后遍历数据表,把相应的数据放到数组中,最后通过json_encode ...

  9. mysql操作json优点和缺点_SQL-mysql操作json

    一 前言 MySQL 5.7.8 之后 支持 JSON (由rfc7159规定)数据类型,其能在字段中使用json 类型,做到了自动校验是否为json类型数据,否则插入数据会报异常:其次,储存json ...

最新文章

  1. CString对象的一种错误的使用方式
  2. centos7重新加载服务的命令_Centos7 systemctl添加service服务参数说明
  3. YUIDoc example代码高亮错误、生成API文档目录不按源文件注释顺序
  4. 【直观详解】支持向量机SVM
  5. SQL Server 2000中的数据转换服务 (DTS)
  6. ASP.NET企业开发框架IsLine FrameWork系列之六--DataProvider 数据访问(下)
  7. 高清设计素材|自然纸纹理,重构自然与生活的趣味
  8. 十进制小数==二进制小数
  9. TSS ESS RSS
  10. movielens 1m 的mysql_数据分析实例-MovieLens 1M 数据集
  11. 计算机常用的英语单词及缩写,常见计算机英语缩写及单词
  12. lbochs模拟器最新版_Bochs模拟器下载_Bochs模拟器免费[系统增强]-下载之家
  13. 谢烟客---------Linux之 sed工具使用
  14. 手机群控软件的运行环境台式机/HUB配置分享
  15. ubuntu18.04/linux安装ffmpeg 遇到的错误
  16. 报表工具和BI商业智能的区别,你真的弄清楚了吗?
  17. 【技术人快报】摩拜单车多地区现Bug+iCloud完成中国本土化落地
  18. 程序猿必备的数电知识之(逻辑代数基础后半篇)
  19. 和你播放器说“分手”吧
  20. 零点和极点的物理意义

热门文章

  1. CMOS图像传感器——闪烁(flicker)现象
  2. ABB机器人的错误处理
  3. mpls工作原理通俗解释_用这两种方法向最终用户解释NLP模型的工作原理还是不错的...
  4. centos 安装 MatConvNet (gpu)
  5. python中的可变数据类型有列表和元组_Python中列表的 += 和 .extend() 的异同
  6. CMake 编译 OpenCV 项目,不是编译OpenCV, 用了之后才知道CMake也太好用了。
  7. c#和python同一主机直接udp_为什么Python 如此之慢
  8. C语言交换两个数(不创建临时变量)
  9. 进程调试--进程启动VS自动附加
  10. 阅读笔记,软件需求分析