UTF-32 (англ. Unicode Transformation Format) или UCS-4 (универсальный набор символов, англ. Universal Character Set) в информатике — один из способов кодирования символов Юникода, использующий для кодирования любого символа ровно 32 бита. Остальные кодировки, UTF-8 и UTF-16, используют для представления символов переменное число байтов. Символ UTF-32 является прямым представлением его кодовой позиции (Code point).
Главное преимущество UTF-32 перед кодировками переменной длины заключается в том, что символы Юникод непосредственно индексируемы. Получение n-ой кодовой позиции является операцией, занимающей одинаковое время. Напротив, коды с переменной длиной требует последовательного доступа к n-ой кодовой позиции. Это делает замену символов в строках UTF-32 простой, для этого используется целое число в качестве индекса, как обычно делается для строк ASCII.
Главный недостаток UTF-32 — это неэффективное использование пространства, так как для хранения символа используется четыре байта. Символы, лежащие за пределами нулевой (базовой) плоскости кодового пространства, редко используются в большинстве текстов. Поэтому удвоение, в сравнении с UTF-16, занимаемого строками в UTF-32 пространства, не оправдано.
Хотя использование неменяющегося числа байтов на символ удобно, но не настолько, как кажется. Операция усечения строк реализуется легче в сравнении с UTF-8 и UTF-16. Но это не делает более быстрым нахождение конкретного смещения в строке, так как смещение может вычисляться и для кодировок фиксированного размера. Это не облегчает вычисление отображаемой ширины строки, за исключением ограниченного числа случаев, так как даже символ «фиксированной ширины» может быть получен комбинированием обычного символа с модифицирующим, который не имеет ширины. Например, буква «й» может быть получена из буквы «и» и диакритического знака «крючок над буквой». Сочетание таких знаков означает, что текстовые редакторы не могут рассматривать 32-битный код как единицу редактирования. Редакторы, которые ограничиваются работой с языками с письмом слева направо и составными символами (англ. Precomposed character), могут использовать символы фиксированного размера. Но такие редакторы вряд ли поддержат символы, лежащие за пределами нулевой (базовой) плоскости кодового пространства и вряд ли смогут работать одинаково хорошо с символами UTF-16.
Стандарт ISO 10646 определяет 31-битную форму кодировки, названную UCS-4, в которой каждый закодированный символ представлен 32-разрядным значением кода в кодовом пространстве чисел от 0 до 7FFFFFFF.
Поскольку на самом деле используются только 17 плоскостей, то коды всех символов имеют значения от 0 до 0x10FFFF. UTF-32 — это подмножество UCS-4, которое использует только этот диапазон. Так как документ JTC1/SC2/WG2 устанавливает, что все будущие назначения символов будут ограничены нулевой (базовой) плоскостью кодового пространства или первыми 14 дополнительными плоскостями, то UTF-32 сможет представить все символы Юникода. Соответственно, UCS-4 и UTF-32 идентичны в настоящее время, за исключением того, что у стандарта UTF-32 есть дополнительная семантика Юникода.
UTF-32 применяется, главным образом, не в строках символов, а во внутренних API, где данные являются единственной кодовой позицией или глифом. Например, при прорисовке текста на последнем шаге происходит построение списка структур, каждая из которых включает в себя позиции x и у, атрибуты и единственный символ UTF-32, идентифицирующий глиф для прорисовки. Часто в «неиспользуемых» 11 битах каждого 32-битного символа хранится посторонняя информация.
UTF-32 используются для хранения строк в Unix в том случае, когда тип wchar_t определён как 32-битный. Программы на Python версии по 3.2 включительно могли быть откомпилированы для использования UTF-32 вместо UTF-16. С версии 3.3 поддержка UTF-16 была удалена, и строки хранятся в UTF-32, но лидирующие нули оптимизируются в случае их неиспользования. В ОС Windows, в которой тип wchar_t имеет размер 16 бит, строки UTF-32 почти не используются.
Стандарт HTML5 гласит, что «авторы не должны использовать UTF-32, поскольку алгоритмы определения кодировки, описанные в данной спецификации, не отличают его от UTF-16».
Кодировки символов | ||
---|---|---|
Основы | алфавит • текст (файл • данные) • набор символов • конверсия | |
Исторические кодировки | Докомп.: | семафорная (Макарова) • Морзе • Бодо • МТК-2 |
Комп.: | 6-битная • УПП • RADIX-50 • EBCDIC (ДКОИ-8) • КОИ-7 • ISO 646 | |
современное 8-битное представление |
символы | ASCII (управляющие • печатные) • не-ASCII (псевдографика) |
8-битные код.стр. | Кириллица: КОИ-8 • Основная кодировка • MacCyrillic | |
ISO 8859 | 1 (лат.) • 2 • 3 • 4 • 5 (кир.) • 6 • 7 • 8 • 9 • 10 • 11 • 12 • 13 • 14 • 15 (€) • 16 | |
Windows | 1250 • 1251 (кир.) • 1252 • 1253 • 1254 • 1255 • 1256 • 1257 • 1258 • WGL4 | |
IBM & DOS | 437 • 850 • 852 • 855 • 866 «альт.» • МИК | |
Многобайтные | Традиционные | DBCS (GB2312) • HTML |
Unicode | UTF-32 • UTF-16 • UTF-8 • список символов (кириллица) | |
Связанные темы | интерфейс пользователя • раскладка клавиатуры • локаль • перевод строки • шрифт • транслит • нестандартные шрифты | |
Утилиты | iconv • recode |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .