python json unicode utf-8处理总结
1.直接输出字典中文
在python中经常遇见直接print dict(字典),或者dict转json,但是没有给特定的参数,然后打印json字符串,输出的中文就成了unicode码的情况,如下:
d = {'name': '张三', 'age': '1'}
print d
jd = json.dumps(d)
print jd
输出结果为:
{'age': '1', 'name': '\xe5\xbc\xa0\xe4\xb8\x89'}
{"age": "1", "name": "\u5f20\u4e09"}
这种情况怎么办呢?
要将字典中的中文正确的输出,可以将d转换成json字符串,转换时使用json.dumps(d, ensure_ascii=False, encoding='utf-8'))
d = {'name': '张三', 'age': '1'}
print d
jd = json.dumps(d, ensure_ascii=False, encoding='utf-8'))
print jd
输出结果为:
{'age': '1', 'name': '\xe5\xbc\xa0\xe4\xb8\x89'}
{"age": "1", "name": "张三"}
参数ensure_ascii=False不能少, encoding可以省略,因为默认就是encoding='utf-8'
关于参数ensure_ascii的解释:
If ``ensure_ascii`` is true (the default), all non-ASCII characters in the
output are escaped with ``\uXXXX`` sequences, and the result is a ``str``
instance consisting of ASCII characters only. If ``ensure_ascii`` is
``False``, some chunks written to ``fp`` may be ``unicode`` instances.
This usually happens because the input contains unicode strings or the
``encoding`` parameter is used. Unless ``fp.write()`` explicitly
understands ``unicode`` (as in ``codecs.getwriter``) this is likely to
cause an error.
关于参数encoding的解释:
``encoding`` is the character encoding for str instances, default is UTF-8.
2.用python自带的json库将json转换成字典输出,输出是unicode码
在用json.loads(json_str)将json_str字符串转换成字典时,字典中的内容是unicode码,具体如下:
ud = json.loads(jd, encoding='utf-8')
print ud
输出结果:
{u'age': u'1', u'name': u'\u5f20\u4e09'}
字典中的字符串都带的u,要想去掉u,有两种办法
a.使用yaml库的yaml.safe_load(jd)
import yaml
d = {'name': '张三', 'age': '1'}
print d
jd = json.dumps(d, ensure_ascii=False, encoding='utf-8'))
ud = json.loads(jd, encoding='utf-8')
print ud
ud = yaml.safe_load(jd, encoding='utf-8')
print ud
结果输出为:
{u'age': u'1', u'name': u'\u5f20\u946b'}
{'age': '1', 'name': u'\u5f20\u946b'}
视觉明锐的同学可能发现第二个name的值前还是有u,也就是说他是unicode码。的确是的,上面的第1点已经说明了,直接打印字典,字典里面的中文就是乱码的,但是为什么是unicode码,需要更深一步分析,也希望知道的朋友不吝留言告知,谢谢。
b 递归实现转码函数自己去将json.loads()返回的字典从unicode码转成自己想要的码,实现如下:
def byteify(input, encoding='utf-8'):
if isinstance(input, dict):
return {byteify(key): byteify(value) for key, value in input.iteritems()}
elif isinstance(input, list):
return [byteify(element) for element in input]
elif isinstance(input, unicode):
return input.encode(encoding)
else:
return input
使用示例:
d = {'name': '张三', 'age': '1'}
print d
jd = json.dumps(d, ensure_ascii=False, encoding='utf-8'))
ud = json.loads(jd, encoding='utf-8')
print ud
ud = byteify(ud)
print ud
print ud['name']
输出结果如下:
{u'age': u'1', u'name': u'\u5f20\u946b'}
{'age': '1', 'name': '\xe5\xbc\xa0\xe9\x91\xab'}
张三
这次是彻底的将json.loads()返回的字典转换码成了utf-8,至于输出为什么是乱码?别忘了,开头第一点说的,直接print字典,中文是会乱码的,但是print ud['name'] 就会正常显示中文'张三'。
参考来源:https://stackoverflow.com/questions/956867/how-to-get-string-objects-instead-of-unicode-from-json
作者:llicety
链接:https://www.jianshu.com/p/90ecc5987a18
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
python json unicode utf-8处理总结的更多相关文章
- python json基础学习01
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' import json #全称(javascript object ...
- python json数据的转换
1 Python数据转json字符串 import json json_str = json.dumps(py_data) 参数解析: json_str = json.dumps(py_data,s ...
- python大法好——python json
Python JSON 本章节我们将为大家介绍如何使用 Python 语言来编码和解码 JSON 对象. JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式, ...
- Python: json模块实例详解
ref:https://www.jianshu.com/p/e29611244810 https://www.cnblogs.com/qq78292959/p/3467937.html https:/ ...
- python学习笔记——python JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. 1.JSON 函数 使用 JSON 函数需要导入 json 库:import json ...
- Python json使用
转自:https://www.cnblogs.com/wangyayun/p/6699184.html?utm_source=tuicool&utm_medium=referral 使用Pyt ...
- python json.dumps() 中文乱码问题
python json.dumps() 中文乱码问题 python 输出一串中文字符,在控制台上(控制台使用UTF-8编码)通过print 可以正常显示,但是写入到文件中之后,中文字符都输出成as ...
- python中unicode和str的组合
python中unicode对象和str对象拼接在一起,会自动将str对象转换成unicode对象 即:a="aa" b=u"bb" c=a+b type(c) ...
- python json库
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. 1.json库的使用 使用 JSON 函数需要导入 json 库:import jso ...
随机推荐
- Postman学习宝典(一)
前言:网上看到的比较好的Postman教程,既然已经有了,我就不重复造轮子了,直接copy过来. 资源来源于:米阳MeYoung Postman 入门1- 安装.变量.代理 简介 Postman 是一 ...
- HTML标签和属性一
一.web基础知识 html,专门指网页技术 HTML5,大前端技术(网页,app,桌面程序,数据可视化,VR....) 网页(pc,pad,phone) app wx 服务器 数据库 HTML5 ...
- HTML5面试题
1. sessionStorage和localStorage的区别 答案: sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 统一规范API,包装返回模型
上一篇文章(https://www.cnblogs.com/meowv/p/12916613.html)使用自定义仓储完成了简单的增删改查案例,有心的同学可以看出,我们的返回参数一塌糊涂,显得很不友好 ...
- 使用Xtrabackup进行MySQL备份 zz
zz from http://www.magedu.com/ 一.安装 1.简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对i ...
- easyui及读取xml
本地测试地址例如http://localhost:6541/TreeExam/AuthorityTree TreeExam 是TreeExamController AuthorityTree是Tree ...
- wordpress各种获取路径和URl地址的函数总结
wordpress中的路径也不是很负责,有人为了让wordpress运行速度更快,就直接写了绝对地址,其实这样是很不好的,有可能别人修改了wordpress程序的地址,那么这样你编写的这个插件或者是主 ...
- [Node.js]001.安装与环境配置
安装与环境配置 第一步:下载安装文件 第二步:安装nodejs 第三步:npm安装 第四步:安装相关环境 第五步:安装CoffeeScript 第六步:CoffeeScript测试实例 第一步:下载安 ...
- return break 和continue在for循环中的不同作用
平时自己经常在函数里见到return,在switch语句中使用break,而continue则用的不多. 其实这三者都能在for循环中发挥不同的作用,让代码更加灵活. 先说return return是 ...
- 【MOOC操作系统】测试题大题-进程调度 先入先服务算法例题 【某多道程序系统供用户使用的主存为100K,磁带机2台,打印机1台,采用可变分区存储管理,静态方式分配外围设备(进程获得所需全部设备才能进入内容),忽略用户作业的I/O时间。采用动态分区、首次匹配法(从低地址区开始)分配主存,一个作业创建一个进程,且运行中不紧缩内存。作业调度采用FCFS算法,在主存中的进程采用剩余时间最短调度算法。】
分析图: 答案: (1) 8 : 00作业1到达,占有资源并调入主存运行. 8: 20作业2和3同时到达,但作业2因分不到打印机,只能在后备队列等待.作业3资源满足,可进主存运行,并与作业1平分CPU ...