编码“\xaf”字符会产生 2 个编码字符

Encoding "\xaf" char results in 2 encoded characters

我刚刚偶然发现如果我尝试对“\xaf”字符进行编码,我会在我的字节对象中得到一个额外的字符。意思是当我 运行 这个命令时:

print('\xaf'.encode())

我得到以下结果:

b'\xc2\xaf'

所以我想这可能是 print 函数正在做的事情,所以我打开了 IDLE 并尝试 运行 自己执行命令并查看输出结果,但字符仍然存在:

我真的不明白为什么会弹出这个额外的字符,如果有人能向我解释一下,我将不胜感激。

提前致谢!

这就是 UTF-8 encoding works. You can read more about here。所以主要思想是UTF-8使用以下规则对字符串进行编码。

  • 如果code point<128,则用对应的表示 字节值。

  • 如果code point >= 128,则变成2的序列,
    三个或四个字节,其中序列的每个字节介于 128 和 255.

您的初始字符的代码点大于 128(不适合一个字节),因此用两个字节编码。

注意:您可以使用ord函数获取单字符字符串的Unicode代码点

>>> help(ord)
Help on built-in function ord in module builtins:

ord(c, /)
    Return the Unicode code point for a one-character string.
>>>
>>> ord('\xaf')
175
>>> list('\xaf'.encode())
[194, 175]