首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以UTF-32编码的单个字符的长度

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

Stack Overflow用户
提问于 2017-10-04 07:58:48
回答 1查看 630关注 0票数 1

维基百科告诉我,UTF-32编码所使用的比特数是32位,那么为什么这会给我64位长呢?

代码语言:javascript
复制
>>> Bits(bytes = 'a'.encode('utf-32')).bin
'1111111111111110000000000000000001100001000000000000000000000000'
>>> len(Bits(bytes = 'a'.encode('utf-32')).bin)
64

UTF-32应该是一个4字节的固定长度字符集,根据我的理解,每个字符在32位内都有固定的长度,然而,上述代码的输出是64。这怎么回事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-04 08:03:14

编码到UTF-32通常包括一个字节顺序标记有两个字符被编码为UTF-32.BOM通常是必需的,因为它让解码器知道数据是按照小endian还是大端顺序编码的。BOM实际上只是U+FEFF零宽度无间断空间代码点,在您的示例中它被编码为'11111111111111100000000000000000' (小端点)。

对Python提供的两个特定于endian的变体('utf-32-le''utf-32-be')中的一个进行编码,以获得一个字符:

代码语言:javascript
复制
>>> 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个字节:

代码语言:javascript
复制
>>> len('abcd'.encode('utf-32'))  # (BOM + 4 chars) * 4 bytes == 20 bytes
20
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46559774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档