bytes()初始化器添加一个额外的字节?

时间:2016-11-01 00:50:03

标签: python-3.x utf-8 bytestring

我在python3中初始化一个utf-8编码字符串:

bytes('\xc2', encoding="utf-8", errors="strict")

但在写出来之后,我得到了两个字节!

>>> s = bytes('\xc2', encoding="utf-8", errors="strict")
>>> s
b'\xc3\x82'

这个附加字节来自哪里?为什么我不能编码任何最多254的十六进制值(我可以理解255可能保留扩展到utf-16)?

1 个答案:

答案 0 :(得分:0)

Unicode代码点"\xc2"(也可以写为"Â")在使用utf-8编码进行编码时长度为两个字节。如果您希望它是单字节b'\xc2',您可能希望使用不同的编码,例如"latin-1"

>>> s = bytes("\xc2", encoding="latin-1", errors="strict")
>>> s
b'\xc2'

如果您使用文字直接创建"\xc2"区域,则无需使用bytes构造函数将其转换为bytes实例。只需使用文字上的b前缀直接创建字节:

s = b"\xc2"