千家信息网

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

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇文章为大家展示了Bytes型数据decode时是为什么要把几位数据组合在一起的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。大家在开发 Python 的过
千家信息网最后更新 2026年11月03日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安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技有限公司 广州紫鲸互联网科技有限公司 科技互联网产品 互联网科技公司华为 A股互联网金融科技公司 互联网核心科技是什么 工业互联网科技新基建 互联网科技的英文 北京禾田雨橡互联网科技 一五八零互联网科技 甘肃拓世互联网科技有限公司 佩信高科技互联网 剑昆互联网络科技有限公司临桂 互联网经济与金融科技 恒生互联网科技指数跳水 宇信科技在杭州互联网排第几 下一代互联网重大应用科技园 安徽零酒互联网科技有限公司 安徽九吞吴互联网科技有限公司 知域互联网科技有限公司官网 互联网加科技 老年人脱离互联网科技的作文 广州优美互联网科技 栖莱科技互联网股份有限公司 移动互联网科技公司 成都互联网科技公司工作好不好 互联网科技创新的路径 互联网金融科技公司的优势 三亚科技创新互联网基地 前海云享互联网科技
0