千家信息网

Bytes型数据decode时是为什么要把几位数据组合在一起的

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇文章为大家展示了Bytes型数据decode时是为什么要把几位数据组合在一起的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。大家在开发 Python 的过
千家信息网最后更新 2025年12月02日Bytes型数据decode时是为什么要把几位数据组合在一起的

本篇文章为大家展示了Bytes型数据decode时是为什么要把几位数据组合在一起的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。


大家在开发 Python 的过程中,经常会进行字符串encode为 Bytes型数据,或者把 Bytes 型数据 decode为字符串的操作。例如:

我们知道,在 Unicode 编码中,中文占3个字节,所以一个中文字符编码为 Bytes 型数据以后,会占用3个 Bytes 字符,例如:

>>> a = '青'
>>> a.encode()
b'\xe9\x9d\x92'
>>> b = '青南'
>>> b.encode()
b'\xe9\x9d\x92\xe5\x8d\x97'

注意这里的\xe9需要作为整体来看待,表示一个16进制数。

所以,当我要把 Bytes 型数据\xe9\x9d\x92\xe5\x8d\x97 转为字符串时,Python 会把\xe9\x9d\x92转成字,把\xe5\x8d\x97转成字,看起来,似乎是 Python 知道应该把每3个 Bytes 符号一组来进行处理。

然而,Unicode 中,emoji 表情是4个字节,例如表情符号:????,它对应的 Bytes 型数据为:\xf0\x9f\xa4\x94,如下图所示:

如果我把青????南转换为 Bytes 型数据,值为:\xe9\x9d\x92\xf0\x9f\xa4\x94\xe5\x8d\x97,如下图所示,一共10个 Bytes 字符:

那么问题来了,当我对这个 Bytes 型数据进行 decode 的时候会怎么样呢?如下图所示:

Python 可以正确地把 Bytes 数据划分为:

\xe9\x9d\x92   对应"青"
\xf0\x9f\xa4\x94 对应"????"
\xe5\x8d\x97 对应"南"

为什么 Python 知道要把\xf0\x9f\xa4\x94这4个符号分到一组?为什么不会像下面这样分组?

\xe9\x9d\x92
\xf0\x9f\xa4
\x94\xe5\x8d\x97

实际上,这个问题的原因,只有当我们用二进制来看的时候,才能发现端倪。

对应的第一个 Bytes 字符\xe9,其中的e9是一个十六进制数字,把它转成十进制是233,转成二进制是11101001

对应的第一个 Bytes 字符\xe5,其中的e5是一个十六进制数字,把它转成十进制是229,转成二进制是11100101

????对应的第一个 Bytes 字符\xf0,其中的f0是一个十六进制数字,把它转成十进制是240,转成二进制是11110000

如果还看不出他们的差异,那我们把他们放在一起对比一下:

11101001
11100101
11110000

看出差异了吗?中文汉字是三个字节,转换为 Bytes 型数据以后,第一个字符对应的二进制数是1110开头。emoji 是4个字节,转换为 Bytes 型数据以后,第一个字符对应的二进制数是1111开头。

所以,当给定一个 Bytes 型数据需要给 Python 来转换为字符串的时候,Python 是这样判断应该有几个字符一组的。

  1. 给定 Bytes 型数据: \xe9\x9d\x92\xf0\x9f\xa4\x94\xe5\x8d\x97
  2. 看第一个字符对应的二进制数的高4位是1110,所以当前字符和它后面两个字符(合计3个字符)一组,进行解析,得到 字。
  3. 跳过已经解析的字符,直接来到第四位 \xf0,发现它对应的二进制数高4位是1111,所以这个字符和接下来3个字符(合计4个字符)一组,解析出 ????
  4. 跳过已经解析的字符,来到第8位 \xe5,对应的二进制高4位是1110,因此这个字符和接下来的两个字符一组进行解析,得到
  5. 完成。

对于数字和英文字母,在 Unicode 里面只使用一个字节来表示,他们的 Ascii 码小于128。而多字节的 Unicode 字符,都是从129开头的,所以英文字母数字与中文混合生成的 Bytes 型数据,在解码的时候也不会出现分组不明确的问题。

上述内容就是Bytes型数据decode时是为什么要把几位数据组合在一起的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

字符 数据 二进制 字节 数字 字符串 时候 中文 十六进制 十进制 开头 符号 问题 十进 组合 接下来 两个 内容 字母 差异 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 计算机网络技术面向电商网站 中国国通网络技术有限公司 服务器需要外置存储吗 有没有开源的云服务器 计算机网络技术简历求职意向 监控管理服务器默认ip 湖北综合软件开发价格多少 金万维域名服务器地址 网络安全技术与应用专业好吗 查询plsql重复数据库 汽车检测数据库 绝地求生11月1号服务器进不去 新加坡it软件开发 数据库显示的方式 网络安全学生上课视频 灌云口碑好的网络技术诚信经营 拼多多软件开发公司是谁 服务器共享文件如何转换本地磁盘 南京天渔互联网科技有限公司 网络安全木马的整个流程 老年网络安全的软件 联想服务器远程管理卡还原 播放网络安全手抄报的全部 阜阳服务器机柜外壳 ug12.0刀具数据库 win7下的服务器管理器 取数据库随机 服务器该怎么更新 恢复数据库数据时对数据脱敏 如何增强自我网络安全大学生
0