参考链接: Python-json 7:Unicode和非ASCII字符编码为JSON

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

来源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://www.cnblogs.com/uestc2007/p/10983970.html

[转载] python json unicode utf-8处理总结相关推荐

  1. [转载] python json 编码(dump/dumps:字典转化为json)、解码(load/loads:json转化为字典)

    参考链接: Python-Json 2 : 使用json.load/loads读取JSON文件/字符串 python json 编码(dump/dumps:字典转化为json).解码(load/loa ...

  2. python json数据的转换

    1  Python数据转json字符串 import json json_str = json.dumps(py_data) 参数解析: json_str = json.dumps(py_data,s ...

  3. python json.loads json.dumps(ensure_ascii = False) 汉字乱码问题解决

    python json.loads json.dumps(ensure_ascii = False) 汉字乱码问题解决 python 转换为json时候 汉字编码问题 2017年03月23日 18:5 ...

  4. Python json模块 - Python零基础入门教程

    目录 一.前言 二.python json 模块常用函数 三.json 转 Python 字典 dict 四.Python 字典 dict 转 json 五.关于 json.dump 和 json.l ...

  5. python json数据格式数组内元素递增赋值_python深浅复制,类型转换, json操作,数组操作...

    python深浅复制 import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷 ...

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

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

  7. python json模块

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也 ...

  8. python json模块详解_Python的标准模块包json详解

    引言 对于做web开发的人来说,json文本必须要熟知与熟练使用的.大部分网站的API接口调用返回的数据,就是json格式的.如果看json对象所包含的内容,相信对熟悉Python的人开说,很快就能把 ...

  9. python json模块 超级详解

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也 ...

最新文章

  1. 哈佛结构和冯诺依曼结构区别。
  2. $(选择器).html,选择器.html
  3. AT4519-[AGC032D]Rotation Sort【dp】
  4. LeetCode 1337. 方阵中战斗力最弱的 K 行(优先队列)
  5. numpy的常用函数 不断更新
  6. 浅谈OpenCL之Platform API(1)
  7. 计算机教学训练的有效性,充分利用现代教育技术   提高课堂教学有效性
  8. 做生意失败是一种什么体验?创业中有哪些雷区需要注意?
  9. Matlab中的各种运算符的用法
  10. 解决办法:开机后过很长时间键盘才能用
  11. python3调用arcpy地理加权回归_地理加权回归( GWR)
  12. 计算机财务管理中表格的应用,excel在财务管理中的应用学习心得
  13. cygwin安装wget
  14. Note8 android 9 root,三星Note8 国行 root N9500 9.0 root N9500ZCS6DTC1 root
  15. 大工之星编程挑战赛第五周题解
  16. c语言只中原子变量含义,c语言中的原子操作 - osc_bkg5rgl1的个人空间 - OSCHINA - 中文开源技术交流社区...
  17. 如何用自己电脑做服务器,绑定域名建一个个人网站
  18. 计算机桌面文件保存位置是哪里,电脑微信接收文件存放位置在哪?怎么更改文件存放位置...
  19. ios发布证书过期怎么办?
  20. vue项目引入icon图标

热门文章

  1. linux pv信息写在哪里,linux命令PV介绍
  2. Win7如何禁用无线网卡
  3. 【POJ2018】Best Cow Fences
  4. linux进入vi永久显示行数,mac/linux中vim永久显示行号、开启语法高亮
  5. linux vim 删除 h,Linux VIM 的使用快捷键之删除, 复制, 粘贴
  6. linux_nmon监控教程,如何使用Nmon监控Linux系统性能
  7. DOM对象和jquery对象相互转换
  8. linux装系统到u盘,萌新的Linux之路(1):安装Linux系统到U盘
  9. 可下拉选项可模糊查询的文本输入框
  10. 类String的比较