Python学习---JSON补充内容[中文编码 + dumps解析]
JSON补充内容[微信解决中文乱码,接上]
import json # 英文显示
dic = {"hello": "world"}
str = json.dumps(dic)
# type(str) <class 'str'> str: {"hello": "world"}
print("type(str)", type(str), 'str:', str) # 中文显示
r = {"key": "中国"}
st = json.dumps(r) # 序列化后变成字符串,中文变成ascii编码
# type(st) <class 'str'> st: {"key": "\u4e2d\u56fd"}
print("type(st)", type(st), 'st:', st) # 中文bytes处理
b = bytes(st, encoding="utf-8")
# type(b): <class 'bytes'> b: b'{"key": "\\u4e2d\\u56fd"}' # 发送utf-8字节给微信服务器
print("type(b):",type(b), "b:", b) # 解决方案一: 不使用ensure_ascill编码
k = {"key": "中国"}
new = json.dumps(k, ensure_ascii=False)
print(new) # {"key": "中国"}
bb = bytes(new, encoding="utf-8")
print(bb) # b'{"key": "\xe4\xb8\xad\xe5\x9b\xbd"}' # 解决方案二:先对字典中的msg信息进行占位符处理,然后进行json.dumps[此时是字符串了],接着利用占位符传入msg信息
l = {"key": '%(msg)s' } # 注意引号
new1 = json.dumps(l)
print(new1) # {"key": "%(msg)s"}
new1 = new1 %{'msg': '中国'}
print(new1) # {"key": "中国"}
pp = bytes(new, encoding="utf-8")
print(pp) # b'{"key": "\xe4\xb8\xad\xe5\x9b\xbd"}'
'''
总述:
问题定位:
json.dumps()将中文进行了Ascii编码[默认编码]后返回编码后的字符串【\u4e2d\u56fd】
bytes()将字符串转变为字节进行发送【\\u4e2d\\u56fd】
微信接到消息后进行字节byte向字符串str转换,然后发送给前台。即【\\u4e2d\\u56fd】 --》【\u4e2d\u56fd】 --》乱码
问题解决:
1. 不使用ASCII编码,则直接返回中文后进行字节编码 json.dumps(k, ensure_ascii=False)
2. 使用占位符,在json.dumps()后传入msg信息进去 j = j %{"msg": msg} -->此时显示中文
'''
Json.dumps(cls参数内容以及转换规则)
if cls is None:
cls = JSONEncoder +-------------------+---------------+
| Python | JSON |
+===================+===============+
| dict | object |
+-------------------+---------------+
| list, tuple | array |
+-------------------+---------------+
| str | string |
+-------------------+---------------+
| int, float | number |
+-------------------+---------------+
| True | true |
+-------------------+---------------+
| False | false |
+-------------------+---------------+
| None | null |
+-------------------+---------------+
Python学习---JSON补充内容[中文编码 + dumps解析]的更多相关文章
- Python学习---JSON学习180130
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON是用字符串来表示Javascript对象: Json字符串就是js对象的一种表现形式(字符串的形式 ...
- python 处理 json 四个函数dumps、loads、dump、load的区别
1 .json.dumps() 函数是将一个 Python 数据类型列表(可以理解为字典)进行json格式的编码(转换成字符串,用于传播)eg, dict = {"age": &q ...
- python学习之基础内容
python基础内容① 什么是python? -一种计算机语言,计算机语言分为 -高级语言:python.java.Ruby.C#.C++...... -基础语言:C语言.汇编 -计算机可以直接执行基 ...
- python学习第一天内容整理
.cnblogs_code { width: 500px } 一.python 的历史 (摘自百度百科,了解就ok) Python[1] (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn ...
- Python学习:4.运算符以及数据类型解析
运算符 一.算数运算: 二.比较运算: 三.赋值运算 四.逻辑运算 五.成员运算 基本数据类型 一.Number(数字) Python3中支持int.float.bool.complex. 使用内置的 ...
- Python学习笔记(迭代,列表解析,生成器)
迭代(iterable):支持每次返回自己所包含一个对象的 iter()得到迭代器,.next()遍历列表. 列表解析:根据已有列表高效生成列表的方式. 生成器(Generator): 通过列表生成式 ...
- Python学习笔记-解释器和中文编码
第一行 #!/usr/bin/env python 目的是指出用什么可执行程序去运行代码. 有两种写法 1.#!/usr/bin/python 调用/usr/bin下的python解释器,去运行代码. ...
- Python学习---Django关于POST的请求解析源码分析
当有请求到来之后,先判断请求头content_type是不是[application/x-www-form-urlencoded] --> 如果是则将请求数据赋值给request.body然后解 ...
- 从零开始的Python学习 知识补充sorted
sorted()方法 sorted()可用于任何一个可迭代对象. 原型为sorted(iterable, cmp=None, key=None, reverse=False) iterable:一个可 ...
随机推荐
- java的逻辑与和短路与
逻辑与 --& 短路与 -- && 只说一个最大的区别,平时我们用的最多的是 短路与来进行逻辑判断: 短路与(或)会从左往右逐个判断式子,只要能得出结果后面的式子不再判断.逻辑 ...
- Memcached理解笔记1---安装&常规错误&监控
一.下载 1.Libevent 简单的说就是一个事件触发的网络库,Memcached离不开它. wget http://cloud.github.com/downloads/libevent/libe ...
- 笔记一:python安装和执行
一:学习内容 python安装 python简介 python执行 二:python安装 1. 下载python,网地址:https://www.python.org/,进入地址后,点击下载downl ...
- 不会几个框架,都不好意思说搞过前端: Vue.js - 60分钟快速入门
Vue.js——60分钟快速入门 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理 ...
- MySQL 继续-- Win7 安装及后续工作
学MySQL 差不多了,就要实战,实战怎么能少得了软件. 一 : 下载软件 可以到 MySQL 官网直接下载 (社区版) : http://dev.mysql.com/downloads/mysql ...
- docker1-安装和使用
docker安装和使用 一.安装docker 1.1 centos7.2安装docker 环境:centos7.2 安装方法:https://docs.docker.com/engine/instal ...
- WPF 从文件加载字体
本文告诉大家从文件加载字体.在wpf 使用 fontfamily 显示指定的 ttf 显示字体 假如有字体在 C:\Projects\MyProj\free3of9.ttf ,可以使用 Private ...
- MVC 之var与dynamic
如果你用MVC写过程序,那么你应该知道ViewBag这个用于前后台的数据传递工具,那么你是否对ViewBag的用法感到过疑惑呢? ViewBag.Mode1l=new object(); ViewBa ...
- Tomcat配置列表显示
找到tomcat安装的conf文件下的web.xml文件 C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\web.xml 打开后 ...
- XCode 添加自定义framework运行时出现dyld: Library not loaded的解决方法
XCode添加自定义framework运行时出现dyld: Library not loaded的解决方法 在使用自定义的framework运行时,会出现如下的错误: dyld: Library no ...