Unicode 编码,python 文档 - 为什么是 32 位编码?

Unicode encoding, python documentation - why a 32-bit encoding?

我正在阅读 Python 文档中的 UNICODE Howto。 写着

a Unicode string is a sequence of code points, which are numbers from 0 through 0x10FFFF

这使得它看起来像表示代码点所需的最大位数是 24(因为有 6 个十六进制字符,并且 6*4=24)。

但随后文档指出:

The first encoding you might think of is using 32-bit integers as the code unit

这是为什么?我能想到的第一个编码是 24 位整数,而不是 32 位。

其实你只需要21个。很多CPU本身就使用32位寄存器,大多数语言都有32位整数类型。

如果你研究过 UTF-16 和 UTF-8 编码,你会发现它们的算法使用两个 16 位代码单元和四个 8 位代码单元最多编码一个 21 位代码点,分别。

因为这是标准方式。 Python使用不同的"internal encoding",取决于字符串的内容:ASCII/ISO、UTF-16、UTF-32。 UTF-32 是一种常用的表示形式(通常只是程序的实习生)来表示 Unicode 代码点。所以 Python,而不是重新发明其他编码(例如 UTF-22),它只是使用 UTF-32 表示。不同的接口也更容易。在 space 上效率不高,但在字符串操作上效率更高。

注意:Python(在极少数情况下)也使用代理项范围来编码 "wrong" 字节。所以你需要超过 10FFFF 个代码点。

注意:颜色编码也有类似的编码:8bit * 3 channels = 24bit,但通常用 32 个整数表示(但这也有其他原因:只是一个写,而不是总线上的 2 读 + 2 写) . 32 位更容易处理和快速处理。