Netencyclo Української, The wikipedia mirror - The biggest multilingual encyclopedia : Юнікод

- Юнікод -

Юнікод :

Юнікод

Матеріал з Вікіпедії — вільної енциклопедії.

Перейти до: навігація, пошук

Юніко́д, (англ. Unicode) — це промисловий стандарт розроблений, щоб зробити можливим для текстів і символів (графічних знаків) всіх писемних систем світу узгоджене представлення (репрезентацію) і обробку комп’ютерами. Удосконалений сумісно з стандартом Універсальний Набір Символів (Universal Character Set - UCS) і опублікований в формі книги Стандарт Юнікод, Юнікод складається з асортименту символів, методології кодування і комплекту (набору) стандартів кодування символів, комплекту кодових таблиць для посилань на зображення символів, списку властивостей символів таких, наприклад, як верхній і нижній регістр, комплект довідкових даних комп’ютерних файлів, правил нормалізації, декомпозиції, співставлення і зображення (рендерингу).

Стандарт запропонувала в 1991 році організація Консорціум Юнікоду (англ. Unicode Consortium), яка обєднує найбільші ІТ-компанії (корпорації). Консорціум Юнікоду — неприбуткова (некомерційна) організація, яка координує розвиток Юнікоду, має амбітну мету замінити в кінцевому підсумку існуючі системи кодування символів Юнікодом і його системою стандартів Формат Перетворень Юнікоду (UTF, Unicode Transformation Format), тому що багато існуючих систем кодування є обмеженими в розмірі й можливостях і несумісними з багатомовними середовищами. Успіхи Юнікоду в уніфікації наборів символів призвели до його розповсюдження і домінуючого використання в інтернаціоналізації і локалізації програмного забезпечення комп’ютерів. Стандарт був використаний в багатьох новітніх технологіях, включаючи XML, мову програмування Java і сучасні операційні системи.

Юнікод переступає старе обмеження кодування символів одним байтом. Замість того використовує 17 просторів, кожен з яких визначає 65,536 кодів і дає можливість описати максимум 1 114 112 (17 * 216) різних символів. Basic Multilingual Plane (BMP) — Основна Багатомовна Площина, містить майже всі символи, що Ви будете коли-небудь використовувати.

Юнікод має декілька реалізацій, але найпоширенішими є дві: UTF (Unicode Transformation Format) — Формат Перетворення Юнікоду та UCS (Universal Character Set) — Універсальна Таблиця Символів. Число після UTF визначає кількість біт виділених під один юніт, а число після UCS визначає кількість байт. Універсальний набір символів задає однозначну відповідність символів кодам — елементам кодового простору, тобто невід’ємним цілим числам. UTF-8 став найпоширенішим для інтернаціональних кодувань.

UTF-8 є системою кодування з змінною довжиною кодування символів, це означає що для кодування символів він використовує від 1 до 4 байт на символ. Так перший байт UTF-8 використовується для кодування ASCII, що дає повну сумісність з ASCII. Перекодування ASCII кодом UTF-8 для латинських символів дуже незначно збільшить розмір даних, бо використовується тільки перший байт. В східних мовах де мусять для кодування використовувати вищі байти це кодування збільшує розмір даних на 50 %.

UTF-8 дозволяє Вам працювати в стандартизованому міжнародно прийнятому багатомовному середовищі, з порівняно незначним збільшенням об'єму даних. UTF-8 являє собою ідеальний спосіб передачі не ASCII кодованих символів через Інтернет, електронну пошту, чат, та інших.

Коди в стандарті Unicode поділені на декілька областей. Область з кодами від U+0000 до U+007F (про запис виду «U+xxxx» дивись нижче в розділі «Кодовий простір») містить символи набору ASCII. Далі розміщені області знаків різних писемностей, знаки пунктуації і технічні символи. Частина кодів зарезервована для використання в майбутьньому. Для символів кирилиці виділені коди від U+0400 до U+052F (див. Кирилиця в Юнікоді).

Зміст

[ред.] Розділи стандарту Юнікод

Стандарт Unicode складається з двох основних розділів: універсальний набір символів і сімейство кодувань. Універсальний набір символів задає однозначну відповідність символів кодам – елементам кодового простору, що представляють ненегативні цілі числа. Сімейство кодувань визначає машинне представлення послідовності кодів універсального набору символів.

Стандарти наборів символів:

UCS-4 (англ. Universal Character Set) – 1 символ = 4 байти, всього можна закодувати 232 символів. Проте максимальна кількість Юнікод-символів на сьогодні - 220 + 216 = 1 114 112. UCS-2 (англ. Universal Character Set) – 1 символ = 2 байти, всього можна закодувати 65 536 символів.

Стандарти кодувань:

UTF-32 (англ. Unicode Transformation Format – формат перетворення Юнікода) – один із способів кодування символів із Unicode у вигляді 32-бітних послідовностей. 1 символ = 32-біти. UTF-16 – один із способів кодування символів із Unicode у вигляді 16-бітних послідовностей. Символи з кодами менше 0x10000 (216) представляються як є (одна 16-бітна послідовність), а символи з кодами 0x10000–0x10FFFE — у вигляді двох 16-бітних послідовностей (так звана «сурогатна» пара), перша з яких лежить в діапазоні 0xD800–0xDBFF, а друга — 0xDC00–0xDFFF. Легко бачити, що існує 210 * 210 = 220 таких комбінацій. А загальна кількість можливих символів 220 + 216 = 1 114 112. Слід зазначити, що за стандартом ніякі символи не можуть мати кодів власне з діапазону 0xD800-0xDFFF, так що розшифровка кодування завжди однозначна. Втім, в переважній більшості випадків текст в UTF-16 є просто послідовністю символів з UCS-2, оскільки символи Unicode після коду 0x10000 використовуються вкрай рідко.

UTF-16LE та UTF-16ВE У потоці даних UTF-16 старший байт може записуватися або перед молодшим (UTF-16 Big Endian або UTF-16BE), або після молодшого (UTF-16 Little Endian або UTF-16LE). Іноді кодування Юнікода Big Endian (UTF-16BE) називають Юнікодом із зворотним порядком байтів. Аналогічно існує два варіанти 32-байтного кодування: UTF-32LE та UTF-32ВE.

UTF-8 – в даний час поширене кодування, що реалізовує представлення Юнікода, сумісне з 8-бітовим кодуванням тексту. Текст, що складається тільки з символів з номером менше 128, при записі в UTF-8 перетворюється на звичайний текст ASCII. І навпаки, в тексті UTF-8 будь-який байт із значенням менше 128 зображає символ ASCII з тим же кодом. Решта символів Юнікода зображається послідовностями завдовжки від 2 до 6 байтів (реально тільки до 4 байт, оскільки використання кодів більше 221 не планується), в яких перший байт завжди має вид 11xxxxxx, а інші - 10xxxxxx.

Простіше кажучи, у форматі UTF-8 символи латинського алфавіту, розділові знаки і керуючі символи ASCII, записуються кодами ASCII-кодами, а решта всіх символів кодується за допомогою октетів (послідовності довжиною 8 біт) із старшим бітом 1. В результаті, навіть якщо програма не розпізнає Юнікод, то латинські букви, арабські цифри і розділові знаки відображатимуться правильно.

Символи UTF-8 отримують з Unicode таким чином:

Unicode UTF-8

0x00000000 — 0x0000007F: 0xxxxxxx

0x00000080 — 0x000007FF: 110xxxxx 10xxxxxx

0x00000800 — 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx

0x00010000 — 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx


Також теоретично можливі, але не включені в стандарти:

Unicode UTF-8

0x00200000 — 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

0x04000000 — 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx


[ред.] BOM

Для визначення формату представлення Юнікода в текстовому файлі використовується прийом, по якому на початку тексту записується символ U+FEFF (нерозривний пропуск з нульовою шириною), також іменований міткою порядку байтів (англ. Byte Order Mark, BOM). Цей спосіб дозволяє розрізняти UTF-16LE і UTF-16BE, оскільки символу U+FFFE не існує. Також він іноді застосовується для позначення формату UTF-8, хоча до цього формату і непридатне поняття порядку байтів. Файли, які дотримуються цього правила починаються з таких байтів:


UTF-8 EF BB BF

UTF-16BE FE FF

UTF-16LE FF FE


UTF-32BE 00 00 FE FF

UTF-32LE FF FE 00 00

[ред.] Кодовий простір

Хоча форми запису UTF-8 і UTF-32 ( 8 і 32 десяткові числа, які вказують кількість двійкових розрядів ) дозволяють кодувати до 231 (2 147 483 648) кодових позицій, було прийнято рішення використовувати лише 220+216 (1 114 112) для сумісности з UTF-16. Втім, навіть і цього більш ніж достатньо — сьогодні (в версії Unicode 5.0) використовується трохи більше 99 000 кодових позицій.

[ред.] Кодування та типи текстових даних мови С/С++

В мові С/С++ історично склалася така ситуація. Для роботи зі «звичайними» текстовими даними існує тип char. Для роботи з так званим «широким» текстом існує тип wchar_t. Особливості використання цих типів даних залежить від системи. А власне особливостями є кодування тексту в типах даних, та розмір одного символа. Для порівняння візьмемо дві системи:


Linux

1. char («звичайний» текст) Кодування – UTF-8 Розмір 1 символа – 1, 2, 3 або 4 байти sizeof(char) = 1

2. wchar_t («широкий» текст) Кодування – UTF-32 Розмір 1 символа – 4 байти sizeof(wchar_t) = 4

Windows

1. char («звичайний» текст) Кодування – кодові сторінки Розмір 1 символа – 1 байт sizeof(char) = 1

2. wchar_t («широкий» текст) Кодування – UTF-16 Розмір 1 символа – 2 або 4 байти sizeof(wchar_t) = 2

[ред.] Висновки

Характерна особливість набору символів (UCS) – символи завжди фіксованої довжини: UCS-2 – 1 символ = 2 байти UCS-4 – 1 символ = 4 байти

Характерна особливість кодування (UTF) – символи НЕ завжди фіксованої довжини: UTF-32 – єдине кодування з фіксованою довжиною символів, 1 символ = 32 біти = 4 байти, тому можна сказати, що код символа в UCS-4 дорівнює коду символа в UTF-32. UTF-16 – коди символів < 216 однозначно відповідають кодам символів з набору UCS-2. Коди решти символів (символи з кодом >= 216) є однозначними тільки для UTF-16. UTF-8 – коди символів < 128 однозначно відповідають кодам символів верхньої частини ASCII таблиці. Коди решти символів (символи з кодом >= 128) є однозначними тільки для UTF-8.

Твердження «1 байт = 1 символ» є застарілим і в переважній більшості практичних випадків є хибним. Довжина символа НЕ є фіксованою (виняток складає кодування UTF-32 та ASCII таблиця). Юнікод у програмах – добра платформа для підтримки багатомовності.


[ред.] Посилання

Юнікод - Вибрана стаття

Юнікод - Цікавинки

© 2008 Netencyclo - Netencyclo Головна стаття - Політика конфіденційності - Умови використання - Program Policies
Netencyclo, the Wikipedia mirror : the biggest multilingual free-content encyclopedia on the Internet. Вміст доступний згідно з GNU Free Documentation License. All Wikipedia content is licensed under the GNU Free Documentation License (see details). Content on this web site is provided for informational purposes only. We accept no responsibility for any loss, injury or inconvenience sustained by any person resulting from information published on this site. We encourage you to verify any critical information with the relevant authorities.