UTF-32

UTF-32 (англ. Unicode Transformation Format) або UCS-4 (універсальний набір символів, англ. Universal Character Set) в інформатиці — один зі способів кодування символів Юнікоду, який використовує для кодування будь-якого символу рівно 32 біти. Інші кодування, UTF-8 і UTF-16, використовують для подання символів змінну кількість байтів. Символ UTF-32 є прямим поданням його кодової позиції[en]

Головна перевага 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 майже не використовуються.

Невикористання UTF-32 в HTML5

Стандарт HTML5 говорить, що «автори не повинні використовувати UTF-32, оскільки алгоритми визначення кодування, описані в даній специфікації, не відрізняють його від UTF-16».

Посилання

  • Повний опис стандарту Unicode [Архівовано 12 березня 2014 у Wayback Machine.](англ.)
Перегляд цього шаблону
  Словники та енциклопедії
NicoNicoPedia
Нормативний контроль
Freebase: /m/0193vj
  • п
  • о
  • р
Кодування символів
Історичні
кодування
докомп'ютерні
семафорна (Макарова)
Морзе
Бодо
МТК-2
комп'ютерні
6-бітне
УПП
RADIX-50
EBCDIC
ДКОІ
КОІ-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
юнікод
UTF-32
UTF-16
UTF-8
список символів
кирилиця