我正在阅读Python文档中的UNICODE Howto。 写道
Unicode字符串是一系列代码点,它们是来自 0到0x10FFFF
这看起来代表一个代码点所需的最大位数为24(因为有6个十六进制字符,并且6 * 4 = 24)。
但是文档说明:
您可能想到的第一个编码是使用32位整数作为 代码单元
那是为什么?我想到的第一种编码是24位整数,而不是32位。
答案 0 :(得分:1)
实际上,您只需要21。许多CPU本机使用32位寄存器,并且大多数语言都具有32位整数类型。
如果研究UTF-16和UTF-8编码,您会发现它们的算法分别使用两个16位代码单元和四个8位代码单元对一个21位代码点进行编码。
答案 1 :(得分:1)
因为这是标准方式。 Python使用不同的“内部编码”,具体取决于字符串的内容:ASCII / ISO,UTF-16,UTF-32。 UTF-32是一种常用的表示形式(通常只是程序的内部表示形式),用于表示Unicode代码点。因此,Python无需使用其他编码(例如UTF-22),而是使用UTF-32表示形式。不同的接口也更容易。在空间上效率不高,但在字符串操作上效率更高。
注意:Python使用(很少使用)也替代范围来编码“错误”字节。因此,您需要超过10FFFF
个代码点。
注意:颜色编码也具有类似的编码:8位* 3通道= 24位,但通常用32个整数表示(但这也有其他原因:仅是写操作,而不是总线上的2读+ 2写)。 32位更加容易和快速地处理。