Я читаю ЮНИКОД Как в документации Python. Написано, что
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. Многие процессоры изначально используют 32-битные регистры, и большинство языков имеют 32-битный целочисленный тип.
Если вы изучите кодировки UTF-16 и UTF-8, вы обнаружите, что их алгоритмы кодируют максимум 21-битную кодовую точку с использованием двух 16-битных кодовых единиц и четырех 8-битных кодовых единиц соответственно.
Потому что это стандартный способ. Python использует разные «внутренние кодировки» в зависимости от содержимого строки: ASCII/ISO, UTF-16, UTF-32. UTF-32 является широко используемым представлением (обычно только стажером для программ) для представления кодовой точки Unicode. Таким образом, Python вместо того, чтобы изобретать другую кодировку (например, UTF-22), просто использует представление UTF-32. Это также проще для различных интерфейсов. Не так эффективно в пространстве, но гораздо эффективнее в строковых операциях.
Примечание. Python использует (в редких случаях) также суррогатный диапазон для кодирования «неправильных» байтов. Так что вам нужно больше, чем 10FFFF кодовых точек.
Примечание. Также цветовая кодировка имела аналогичную кодировку: 8 бит * 3 канала = 24 бит, но часто представлялась 32 целыми числами (но это также по другим причинам: просто запись вместо 2 чтения + 2 записи на шину). 32 бита намного проще и быстрее в обращении.