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          |
+-------------------+---------------+

原文地址:https://www.cnblogs.com/ftl1012/p/9425428.html

时间: 2024-10-09 11:59:02

Python学习---JSON补充内容[中文编码 + dumps解析]的相关文章

Python学习---JSON学习180130

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON是用字符串来表示Javascript对象: Json字符串就是js对象的一种表现形式(字符串的形式) 不管是python还是其它语言,它们都有自己的数据类型,但如果要处理成json字符串就需要把数据换转成js对应的数据对象(比如python的元组就被处理成了数组,字典就被处理成object),再加上引号就是json字符串了:      前端接受到json字符串,就可以通过JSON.parse()

Python学习—json模块

json模块 四个常用方法 son.dumps() 将python对象编码成为json的字符串格式(最常用的是字典,列表集合等都可以) json.dump() 将python对象编码成为json的字符串格式并写入文件 json.loads() 将json的字符串格式解码成python对象 json.load() 将文件中的json的字符串格式解码成python对象 例子 import json #将python对象编码成为json的字符串格式 d = {'name':'hahaha','bala

Python自动化开发学习15-css补充内容

上节回顾 上一节学习的内容,有一下几点,可以注意一下.或者说推荐这么做. class可以设置多个值-css样式重用 可以给一个标签设置多个class值,这样我们可以为每个class应用一种样式.标签有多个class的话,就为这个标签应用了多个样式.并且之后别的标签要求重用其中的部分样式,只需要设置那个class就好了.要设置多个class的值,只需要用空格隔开每个值即可.下面的例子分别设置了背景色.高度.宽度.外框,然后div的设置了多个class: <head> <meta chars

python学习之基础内容

python基础内容① 什么是python? -一种计算机语言,计算机语言分为 -高级语言:python.java.Ruby.C#.C++...... -基础语言:C语言.汇编 -计算机可以直接执行基础语言,但是基础语言比较复杂,敲代码很麻烦 -高级语言会自动转化为基础语言,再提供给计算机执行. 安装好python后,print("hello world") -python执行文件后缀名可以是任意的 -但是为了pycharm的执行方便,约定俗称使用“.py”后缀 python 的执行方

Python学习之路——控制语句,迭代器, 列表解析

条件语句 if 都是大家的老朋友了,直接代码示例,简单易上手: <span style="font-size:18px;">>>> lang = "python" >>> if lang == "C": ... print "C language" ... elif lang == "Java": ... print "Java language&q

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

当有请求到来之后,先判断请求头content_type是不是[application/x-www-form-urlencoded] --> 如果是则将请求数据赋值给request.body然后解析为字典形式的数据后赋值给request.post 这样我们就可以用request.POST.get('username")获取数据了 --> 如果不是,则直接将请求数据赋值给request.body之后并不赋值给request.post,此时POST内的数据为空 原文地址:https://w

Python学习-函数补充1

1.普通参数(严格按照顺序,将实际参数赋值给形式参数) 2.默认参数(必须放置在参数列表的最后) 3.制定参数(将实际参数赋值给指定的形式参数) 4.动态参数:*(一个*表示在传递参数时,传递的所有参数都会被当作一个元素存放进元组中) (传递的参数前面带一个*时,表示将该参数拆分开,将其拆分的字符分别作为一个元素存放进元组中) def f1(*args):    print(args) f1(["lq",12,"le"]) ("["lq"

Python学习-函数补充2-内置函数

1.abs()    求绝对值 2.all()     参数全部为真,则返回True,否则返回False 3.any()    参数中存在任一个为真,则返回True,全部为假才返回False 4.bin()    将参数转换为二进制表示0b 5.oct()    将参数转换为相应八进制表示0o 6.hex()    将参数转换为相应十六进制表示0x 7.bytes()    将参数转换成字节类型 bytes(要转换的字符串 , 按照什么编码) 8.callable()    是否可被调用的判断

Python学习(四)—— 数据类型方法解析

一. int类型: 1. bit_length 原型:def bit_length(self): 功能:返回int型所占字节数 示例: a = 124 print(bin(a)) print(a.bit_length()) 结果: 0b1111100 7 二.str类型 1. capitalize 原型:def capitalize(self): 功能:字符串首字母大写 示例: s = "abc" print(s.capitalize()) 结果:"Abc" 2.c