编码“\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]
我刚刚偶然发现如果我尝试对“\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]