Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以UTF-32编码的单个字符的长度_Python_Python 3.x_Unicode_Utf 32 - Fatal编程技术网

Python 以UTF-32编码的单个字符的长度

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字节的固定长度字符集,根据我的理解,

告诉我UTF-32编码使用的位数是32位,那么为什么这会给我一个64位的长度呢

>>> 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位,就像其他任何代码点一样。