Python中对\xaf字符执行encode操作后出现额外字符的原因是什么
字符编码现象成因解释
你观察到的结果是UTF-8编码规则下的正常输出,不存在额外异常字符,具体逻辑如下:
- Python 3中
str类型本质是Unicode字符序列,你写的'\xaf'对应的是Unicode码点 U+00AF(对应符号为¯) - 无参数的
encode()方法默认使用UTF-8编码,UTF-8是可变长编码,规则为:- U+0000~U+007F范围的字符用1字节编码,和ASCII标准完全兼容
- U+0080~U+07FF范围的字符用2字节编码,固定格式为
110xxxxx 10xxxxxx
- 码点U+00AF的二进制值为
00000000 10101111,按2字节UTF-8规则拆分计算后:- 第一个字节取高5位值
00010,补前缀110得到11000010,对应十六进制值0xc2 - 第二个字节取低6位值
101111,补前缀10得到10101111,对应十六进制值0xaf - 最终编码结果就是
b'\xc2\xaf',完全符合编码规范
- 第一个字节取高5位值
如果需要得到单字节的b'\xaf'结果,可以使用单字节编码Latin-1(即ISO-8859-1),对应代码为'\xaf'.encode('latin-1'),该编码会将U+0000~U+00FF范围内的Unicode码点直接映射为同值的单字节。
内容的提问来源于stack exchange,提问作者Grammdalf_the_Weight
相关产品推荐
相关产品推荐

