Python 中的“\u”后的16进制字符串 encode与decode 编码问题

本文介绍了Python3中文本和二进制的区分,默认编码为unicode,由str类型表示,二进制用byte类型。阐述了字符串与字节码的互转,即str编码成bytes,bytes解码成str。还提到json序列化中文的编码问题,指定ensure_ascii=False可输出真正中文。

编码原理
https://www.cnblogs.com/284628487a/p/5584714.html

python3中对文本和二进制做了比较清晰的区分。python3默认编码为unicode,由str类型进行表示。二进制数据使用byte类型表示,所以不会将str和byte混在一起。在实际应用中我们经常需要将两者进行互转

字符串通过编码转换为字节码,字节码通过解码转换为字符串
https://blog.youkuaiyun.com/qq_29053519/article/details/79170519
str—>(encode)—>bytes,bytes—>(decode)—>str

“\u”后的16进制字符串是相应汉字的utf-16编码。python里decode()和encode()为我们提供了解码和编码的方法。其中decode(‘unicode_escape’)能将此种字符串解码为unicode字符串。

这个是重点
这是因为json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False:

import json
print json.dumps(‘中国’)
“\u4e2d\u56fd”
print json.dumps(‘中国’,ensure_ascii=False)
“中国”

可以这样理解 json 已经把 Python的类型转化为传输可以识别的类型,已经为字符串了,
如果继续使用编码,就将字符串又转换为计算机识别的字节格式
如果 中文已经变为了字符串,就不要使用编码了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值