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