Python 以UTF-32编码的单个字符的长度
告诉我UTF-32编码使用的位数是32位,那么为什么这会给我一个64位的长度呢Python 以UTF-32编码的单个字符的长度,python,python-3.x,unicode,utf-32,Python,Python 3.x,Unicode,Utf 32,告诉我UTF-32编码使用的位数是32位,那么为什么这会给我一个64位的长度呢 >>> Bits(bytes = 'a'.encode('utf-32')).bin '1111111111111110000000000000000001100001000000000000000000000000' >>> len(Bits(bytes = 'a'.encode('utf-32')).bin) 64 UTF-32应该是一个4字节的固定长度字符集,根据我的理解,
>>> Bits(bytes = 'a'.encode('utf-32')).bin
'1111111111111110000000000000000001100001000000000000000000000000'
>>> len(Bits(bytes = 'a'.encode('utf-32')).bin)
64
UTF-32应该是一个4字节的固定长度字符集,根据我的理解,每个字符在32位内都有固定长度表示它,然而,上面代码的输出是64位。这是怎么回事?UTF-32编码通常包括:;您有两个编码为UTF-32的字符。BOM表通常是必需的,因为它让解码器知道数据是按小端还是大端顺序编码的。BOM实际上只是代码点,在您的示例中,它被编码为
'11111111111100000000000000000'
(小端)
编码到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
20
UTF-32的编码通常包括:;您有两个编码为UTF-32的字符。BOM表通常是必需的,因为它让解码器知道数据是按小端还是大端顺序编码的。BOM实际上只是代码点,在您的示例中,它被编码为
'11111111111100000000000000000'
(小端)
编码到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
20
因此,BOM的长度与字符集中任何字符的位数相同?@BeshalJaenal BOM只是另一个代码点。因此,在UTF-32中,它编码为32位,就像任何其他代码点一样。因此,BOM的长度与字符集中任何字符的位数相同?@BeshalJaenal BOM只是另一个代码点。所以在UTF-32中,它编码为32位,就像其他任何代码点一样。