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. PTA (Advanced Level) 1027 Colors in Mars

    Colors in Mars People in Mars represent the colors in their computers in a similar way as the Earth ...

  2. SpringMVC源码阅读:Controller中参数解析

    1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...

  3. 一个形式较精细的Strling公式的证明

    近日整理书稿,在整理至Strling公式处时,发现当时数学老师所讲的是形式比较精细的一种: Strling公式:\(n!=\sqrt{2\pi n}\left(\dfrac{n}{\mathrm{e} ...

  4. Spark2.3.1中用各种模式来跑官方Demo

    1  使用单机local模式提交任务 local模式也就是本地模式,也就是在本地机器上单机执行程序.使用这个模式的话,并不需要启动Hadoop集群,也不需要启动Spark集群,只要有一台机器上安装了J ...

  5. Node.js进程管理之进程集群

    一.cluster模块 Node.js是单线程处理,对于高并发的请求怎么样能增加吞吐量呢?为了提高服务器的利用率,能不能多核的来处理呢?于是就有了cluster模块. cluster模块可以轻松实现运 ...

  6. 常用算法3 - 字符串查找/模式匹配算法(BF & KMP算法)

    相信我们都有在linux下查找文本内容的经历,比如当我们使用vim查找文本文件中的某个字或者某段话时,Linux很快做出反应并给出相应结果,特别方便快捷! 那么,我们有木有想过linux是如何在浩如烟 ...

  7. 阿里云centos6.5实践编译安装LNMP架构web环境

    LNMP 代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构. 本次测试需求: **实践centos6.5编译安装 LNMP生产环境 架构 web生产环境 使用 ngx_pa ...

  8. TFS Negotiate方式登录的IIS配置

    使用vsts-agent连接到tfs(tfs2017)配置代理客户端,可以通过PAT.Negotiate.Integrated.Alternate四种方式登录.(参考) 默认情况下,采用Negotia ...

  9. PHP中oop面向对象基础知识(一)

                                                                                        OOP 基础知识汇总(一) &g ...

  10. WCF DEMO2 基于HTTP-GET的元数据交换及Configure()方法以及添加MEX终结点

    using System; using System.Diagnostics; using System.Linq; using System.ServiceModel; using System.S ...