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解析]的更多相关文章

  1. Python学习---JSON学习180130

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON是用字符串来表示Javascript对象: Json字符串就是js对象的一种表现形式(字符串的形式 ...

  2. python 处理 json 四个函数dumps、loads、dump、load的区别

    1 .json.dumps() 函数是将一个 Python 数据类型列表(可以理解为字典)进行json格式的编码(转换成字符串,用于传播)eg, dict = {"age": &q ...

  3. python学习之基础内容

    python基础内容① 什么是python? -一种计算机语言,计算机语言分为 -高级语言:python.java.Ruby.C#.C++...... -基础语言:C语言.汇编 -计算机可以直接执行基 ...

  4. python学习第一天内容整理

    .cnblogs_code { width: 500px } 一.python 的历史 (摘自百度百科,了解就ok) Python[1]  (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn ...

  5. Python学习:4.运算符以及数据类型解析

    运算符 一.算数运算: 二.比较运算: 三.赋值运算 四.逻辑运算 五.成员运算 基本数据类型 一.Number(数字) Python3中支持int.float.bool.complex. 使用内置的 ...

  6. Python学习笔记(迭代,列表解析,生成器)

    迭代(iterable):支持每次返回自己所包含一个对象的 iter()得到迭代器,.next()遍历列表. 列表解析:根据已有列表高效生成列表的方式. 生成器(Generator): 通过列表生成式 ...

  7. Python学习笔记-解释器和中文编码

    第一行 #!/usr/bin/env python 目的是指出用什么可执行程序去运行代码. 有两种写法 1.#!/usr/bin/python 调用/usr/bin下的python解释器,去运行代码. ...

  8. Python学习---Django关于POST的请求解析源码分析

    当有请求到来之后,先判断请求头content_type是不是[application/x-www-form-urlencoded] --> 如果是则将请求数据赋值给request.body然后解 ...

  9. 从零开始的Python学习 知识补充sorted

    sorted()方法 sorted()可用于任何一个可迭代对象. 原型为sorted(iterable, cmp=None, key=None, reverse=False) iterable:一个可 ...

随机推荐

  1. Druid连接池(三)

    十二.Druid缓存 连接Oracle数据库,打开PSCache,在其他的数据库连接池都会存在内存占用过多的问题,Druid是唯一解决这个问题的连接池. Oracle数据库下PreparedState ...

  2. rake aborted! You have already activated rake 10.1.0, but your Gemfile requires rake 10.0.3. Using bundle exec may solve this.

    问题: wyy@wyy:~/moumentei-master$ rake db:createrake aborted!You have already activated rake 10.1.0, b ...

  3. ionic中generate page后module.ts报错的解决办法

    此问题出现在Ionic官方将版本从2.2升级到Ionic3以上之后, 在项目中generate page时,自动创建的module.ts就报错,如下: 解决办法如下: 1)将IonicModule替换 ...

  4. [转]微信小程序支付简单小结与梳理

    本文转自:https://www.cnblogs.com/onetwo/p/6667424.html 公司最近在做微信小程序,被分配到做支付这一块,现在对这一块做一个简单的总结和梳理. 支付,对于购物 ...

  5. SqlServer入门学习

    --distinct(去除重复数据)select distinct Time from HightTable--Between select * from HightTable where ID BE ...

  6. 导出为shape文件

    private void barButtonItem2_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)//导出为s ...

  7. datalist控件及list属性

    html5新增了一个datalist元素,可以实现数据列表的下拉效果,气外观类似autocomplete,用户可从列表中选择,也可自行输入,而list用户指定输入框绑定哪一个datalist元素,其值 ...

  8. java 之DelayQueue实际运用示例

    在学习Java 多线程并发开发过程中,了解到DelayQueue类的主要作用:是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走. ...

  9. python学习之老男孩python全栈第九期_数据库day003知识点总结 —— MySQL数据库day3

    复习: 1. 增 insert into xx(name) values('root'),('xxx'); insert into xx(name) select id from tb1; 2. 自增 ...

  10. java-集合小结

    Java集合框架提供了一套性能优良.使用方便的接口和类,包括Collection和Map两大接口,它们都位于   java.util           包中.其中 Collection集合包含两个常 ...