维基百科告诉我,UTF-32编码所使用的比特数是32位,那么为什么这会给我64位长呢?
>>> Bits(bytes = 'a'.encode('utf-32')).bin
'1111111111111110000000000000000001100001000000000000000000000000'
>>> len(Bits(bytes = 'a'.encode('utf-32')).bin)
64UTF-32应该是一个4字节的固定长度字符集,根据我的理解,每个字符在32位内都有固定的长度,然而,上述代码的输出是64。这怎么回事?
发布于 2017-10-04 08:03:14
编码到UTF-32通常包括一个字节顺序标记;有两个字符被编码为UTF-32.BOM通常是必需的,因为它让解码器知道数据是按照小endian还是大端顺序编码的。BOM实际上只是U+FEFF零宽度无间断空间代码点,在您的示例中它被编码为'11111111111111100000000000000000' (小端点)。
对Python提供的两个特定于endian的变体('utf-32-le'或'utf-32-be')中的一个进行编码,以获得一个字符:
>>> Bits(bytes = 'a'.encode('utf-32-le')).bin
'01100001000000000000000000000000'
>>> len(Bits(bytes = 'a'.encode('utf-32-le')).bin)
32-le和-be变体允许您在没有BOM的情况下对UTF-32进行编码或解码,因为您显式地设置了字节顺序。
如果您编码了多个字符,您就会注意到,总是比字符的数量多出4个字节:
>>> len('abcd'.encode('utf-32')) # (BOM + 4 chars) * 4 bytes == 20 bytes
20https://stackoverflow.com/questions/46559774
复制相似问题