Unicode编码,Python文档-为什么使用32位编码?

时间:2019-06-11 20:42:03

标签: python unicode character-encoding python-unicode unicode-string

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

  

Unicode字符串是一系列代码点,它们是来自   0到0x10FFFF

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

但是文档说明:

  

您可能想到的第一个编码是使用32位整数作为   代码单元

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

2 个答案:

答案 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位更加容易和快速地处理。