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


本篇文章为大家展示了Bytes型数据decode时是为什么要把几位数据组合在一起的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
大家在开发 Python 的过程中,经常会进行字符串encode为 Bytes型数据,或者把 Bytes 型数据 decode为字符串的操作。例如:我们知道,在 Unicode 编码中,中文占3个字节,所以一个中文字符编码为 Bytes 型数据以后,会占用3个 Bytes 字符,例如:注意这里的xe9需要作为整体来看待,表示一个16进制数。所以,当我要把 Bytes 型数据xe9x9dx92xe5x8dx97 转为字符串时,Python 会把xe9x9dx92转成字,把xe5x8dx97转成字,看起来,似乎是 Python 知道应该把每3个 Bytes 符号一组来进行处理。然而,Unicode 中,emoji 表情是4个字节,例如表情符号:????,它对应的 Bytes 型数据为:xf0x9fxa4x94,如下图所示:如果我把青????南转换为 Bytes 型数据,值为:xe9x9dx92xf0x9fxa4x94xe5x8dx97,如下图所示,一共10个 香港云主机 Bytes 字符:那么问题来了,当我对这个 Bytes 型数据进行 decode 的时候会怎么样呢?如下图所示:Python 可以正确地把 Bytes 数据划分为:为什么 Python 知道要把xf0x9fxa4x94这4个符号分到一组?为什么不会像下面这样分组?实际上,这个问题的原因,只有当我们用二进制来看的时候,才能发现端倪。对应的第一个 Bytes 字符xe9,其中的e9是一个十六进制数字,把它转成十进制是233,转成二进制是11101001对应的第一个 Bytes 字符xe5,其中的e5是一个十六进制数字,把它转成十进制是229,转成二进制是11100101????对应的第一个 Bytes 字符xf0,其中的f0是一个十六进制数字,把它转成十进制是240,转成二进制是11110000。如果还看不出他们的差异,那我们把他们放在一起对比一下:看出差异了吗?中文汉字是三个字节,转换为 Bytes 型数据以后,第一个字符对应的二进制数是1110开头。emoji 是4个字节,转换为 Bytes 型数据以后,第一个字符对应的二进制数是1111开头。所以,当给定一个 Bytes 型数据需要给 Python 来转换为字符串的时候,Python 是这样判断应该有几个字符一组的。对于数字和英文字母,在 Unicode 里面只使用一个字节来表示,他们的 Ascii 码小于128。而多字节的 Unicode 字符,都是从129开头的,所以英文字母数字与中文混合生成的 Bytes 型数据,在解码的时候也不会出现分组不明确的问题。上述内容就是Bytes型数据decode时是为什么要把几位数据组合在一起的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注开发云行业资讯频道。

相关推荐: java中使用static要注意什么

这篇文章主要介绍“java中使用static要注意什么”,在日常操作中,相信很多人在java中使用static要注意什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java中使用static要注意什么”的疑惑有所帮助!接下来,…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 10/05 22:12
下一篇 10/05 22:12

相关推荐