Кодировка Unicode, документация по python — почему 32-битная кодировка?

Я читаю ЮНИКОД Как в документации 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-битные.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
460
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

На самом деле вам нужно только 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 бита намного проще и быстрее в обращении.

Другие вопросы по теме