pythonjson解析带中文_Python学习JSON补充内容[中文编码 + dumps解析]

本文介绍了在Python中处理JSON时遇到的中文乱码问题及解决方案,包括不使用ensure_ascii编码和使用占位符的方法。同时,列出了Python与JSON的数据类型对应关系。
摘要由CSDN通过智能技术生成

JSON补充内容[微信解决中文乱码,接上]import json

# 英文显示

dic = {"hello": "world"}

str = json.dumps(dic)

# type(str) str: {"hello": "world"}

print("type(str)", type(str), 'str:', str)

# 中文显示

r = {"key": "中国"}

st = json.dumps(r) # 序列化后变成字符串,中文变成ascii编码

# type(st) st: {"key": "u4e2du56fd"}

print("type(st)", type(st), 'st:', st)

# 中文bytes处理

b = bytes(st, encoding="utf-8")

# type(b): 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": "xe4xb8xadxe5x9bxbd"}'

# 解决方案二:先对字典中的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": "xe4xb8xadxe5x9bxbd"}'

'''

总述:

问题定位:

json.dumps()将中文进行了Ascii编码[默认编码]后返回编码后的字符串【u4e2du56fd】

bytes()将字符串转变为字节进行发送【\u4e2d\u56fd】

微信接到消息后进行字节byte向字符串str转换,然后发送给前台。即【\u4e2d\u56fd】 --》【u4e2du56fd】 --》乱码

问题解决:

1. 不使用ASCII编码,则直接返回中文后进行字节编码 json.dumps(k, ensure_ascii=False)

2. 使用占位符,在json.dumps()后传入msg信息进去 j = j %{"msg": msg} -->此时显示中文

'''

7486770227baf776b50846d50ad194e1.png

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 |

+-------------------+---------------+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值