Добрі поради » Інтернет » UTF-8 - кодування символів

UTF-8 - кодування символів

5-02-2016, 08:09
1 574
0
Юнікод підтримує практично всі існуючі набори символів. Найкращою формою кодування набору символів Юнікоду є UTF-8-кодування. У ній реалізована сумісність з ASCII, стійкість до спотворення даних, ефективність і простота обробки. Але про все по порядку.

Форми кодування

Комп'ютери оперують числами не просто як абстрактними математичними об'єктами, а як комбінаціями одиниць зберігання і обробки інформації фіксованого розміру – байтів і 32-розрядних слів. Стандарт кодування повинен це враховувати при визначенні способу представлення символів числами.


В комп'ютерних системах цілі числа зберігаються в комірках пам'яті розміром 8 біт (1 байт), 16 або 32 біт. Кожна форма кодування Unicode визначає, яка послідовність комірок пам'яті представляє ціле число, відповідне конкретному символу. У стандарті представлено три різні форми кодування символів Юнікоду: 816 і 32-бітними блоками. Відповідно, вони носять назву UTF-8 UTF-16 і UTF-32. Назва UTF розшифровується як формат перетворення Юнікод. Кожна з трьох форм кодування є рівноправним засобом представлення символів Юнікод, має переваги в різних областях застосування. Дані кодування можуть бути використані для представлення всіх символів стандарту Юнікод. Таким чином, вони повністю сумісні для рішень, з різних причин використовують різні форми кодування. Кожна кодування може бути однозначно перетворена в будь-яку з двох інших без втрати даних.


UTF-8 - кодування символів

Принцип неналожения

Кожна з форм кодування Юнікоду розроблена з урахуванням неприпустимості часткового накладання. Наприклад, Windows-932 формує символи з одного або двох байтів коду. Довжина послідовності залежить від першого байта, тому значення лідируючого байта в послідовності з двох байтів і одиночного байта не перетинаються. Однак значення одиночного байта і останнього байта послідовності можуть збігатися. Це означає, наприклад, що при пошуку символу D (код 44) можна помилково знайти його входять у другу частину послідовності з двох байтів символу «Д» (код 8444). Щоб з'ясувати, яка послідовність є правильною, програма має врахувати попередні байти. Ситуація ускладниться, якщо ведучий і замикає байт співпадуть. Це означає, що для зняття неоднозначності буде проводитися зворотний пошук до досягнення початку тексту або однозначної послідовності коду. Це не тільки неефективно, але не захищене від можливих помилок, адже достатньо одного неправильного байта, щоб весь текст нечитабельним. Формат Unicode перетворення дозволяє уникнути цієї проблеми, тому що значення ведучої, що замикає і одиночної одиниці зберігання інформації не збігаються. Завдяки цьому всі кодування Юнікоду підходять для пошуку і порівняння, ніколи не даючи помилкового результату із-за збігу різних частин коду символів. Той факт, що дані форми кодування дотримуються принцип неналожения, відрізняє їх від інших многобайтовых східноазіатських кодувань.
Іншим аспектом непересечения кодування Юнікоду є те, що кожен символ має чітко визначені межі. При цьому відпадає необхідність у скануванні невизначеного числа попередніх символів. Дану особливість кодувань іноді називають самосинхронизацией. Спотворення однієї одиниці коду введе до спотворення тільки одного символу, а навколишні символи залишаються недоторканими. В 8-бітному форматі перетворення, якщо покажчик посилається на байт, що починається з 10xxxxxx (у двійковому кодуванні), для пошуку початку символу потрібно від одного до трьох зворотних переходів.
UTF-8 - кодування символів

Узгодженість

Консорціум Unicode в повній мірі підтримує всі 3 форми кодувань. Важливо не протиставляти UTF-8 і Юнікод, адже всі формати перетворення – однаково правомірні втілення форм кодування символів стандарту Юнікод.

Байт-орієнтація

Для представлення символу UTF-32 знадобиться одна 32-бітна одиниця коду, яка збігається з кодом Unicode. UTF-16 – від однієї до двох 16-бітних одиниць. А UTF-8 використовує до 4 байт. Кодування UTF-8 створена для сумісності з байт-орієнтованими системами на основі ASCII. Велика частина існуючого програмного забезпечення і практика інформаційних технологій тривалий час спиралися на уявлення символів у вигляді послідовності байтів. Безліч протоколів залежить від незмінності кодування ASCII і використовує або уникає спеціальні керуючі символи. Простим способом адаптувати Юнікод до таких ситуацій можна, застосувавши 8-бітне кодування для представлення символів Юнікоду, еквівалентних будь-якому символу ASCII або керуючому символу. Для цього і призначена кодування UTF-8.

Змінна довжина

UTF-8 – кодування змінної довжини, що складається з 8-бітних одиниць зберігання інформації, старші біти яких позначають, до якої частини послідовності відноситься кожен окремий байт. Один діапазон значень відведено для першого елемента послідовності коду, інший – для наступних. Це забезпечує непересекаемость кодування.
UTF-8 - кодування символів

ASCII

UTF-8-кодування повністю підтримує коди ASCII (0x00-0x7F). Це означає, що символи Юнікоду U+0000-U+007F конвертуються в єдиний байт 0x00-0x7F UTF-8 і таким чином стають не відрізнятись від ASCII. Більше того, щоб уникнути багатозначності, значення 0x00-0x7F не використовуються більше ні в одному байті представлення символів Юнікоду. Для кодування неидеографических символів, відмінних від ASCII, використовується послідовність з двох байтів. Символи діапазону U+0800-U+FFFF представлені трьома байтами, а додаткові з кодами більше U+FFFF вимагають чотирьох байтів.

Область застосування

Кодуванні UTF-8 зазвичай віддається перевага в протоколі HTML і йому подібним. XML став першим стандартом з повною підтримкою кодування UTF-8. Організації, що займаються стандартизацією, теж рекомендують. Проблема підтримки в адреси URL, відмінних від ASCII-символів, була вирішена, коли консорціум W3С та інженерна група IETF прийшли до угоди про кодування всіх адрес URL виключно в UTF-8. Сумісність з ASCII полегшує перехід до нового програмного забезпечення. З UTF-8 працює більшість текстових редакторів, у тому числі JEdit, Emacs, BBEdit, Eclipse і "Блокнот" операційної системи Windows. Жодна інша форма кодування Юнікоду не може похвалитися такою підтримкою з боку інструментальних засобів. Перевага кодування полягає в тому, що вона складається з послідовності байтів. З рядками UTF-8 легко працювати в C і інших мовах програмування. Це єдина форма кодування, що не вимагає мітки порядку байтів BOM або оголошення кодування XML.
UTF-8 - кодування символів

Самосинхронизация

В оточенні, що використовує 8-бітну обробку символів, порівняно з іншими многобайтными кодуваннями, UTF-8 володіє наступними перевагами:
  • Перший байт послідовності коду містить інформацію про його довжині. Це підвищує ефективність прямого пошуку.
  • Спрощено знаходження початку символу, так як початковий байт обмежений фіксованим діапазоном значень.
  • Відсутній перетин значень байтів.
  • Порівняння переваг

    UTF-8-кодування компактна. Але при застосуванні для кодування східноазіатських символів (китайських, японських, корейських, використовують знаки китайського письма) використовуються 3-байтные послідовності. Також UTF-8-кодування поступається іншим формам кодування по швидкості обробки. А двійкова сортування рядків дає той же результат, що і двійкова сортування Юнікоду.

    Схема кодування символів

    Схема кодування символів складається з форми кодування символів і способу побайтного розташування одиниць коду. Для визначення схеми стандартом кодування Юнікоду передбачено використання початкової мітки порядку байтів (BOM, Byte order mark). При включенні BOM в UTF-8 функція мітки обмежується лише вказівкою на використання форми кодування. Проблеми визначення порядку байтів у UTF-8 немає, так як її розмір одиниці кодування дорівнює одному байту. Використання BOM для даної форми кодування не є ні обов'язковим, ні рекомендованим. BOM може зустрічатися в текстах, конвертованих з інших кодувань, використовують мітку порядку байтів, або сигнатури для кодування UTF-8. Являє собою послідовність з 3 байтів EF 16 BB 16 BF 16 .
    UTF-8 - кодування символів

    Як задати кодування UTF-8

    В HTML кодування UTF-8 встановлюється з допомогою наступного коду: ?head? ?meta http-equiv="Content-Type" content="text/html; charset=utf-8"? В PHP кодування UTF-8 задається за допомогою функції header() на самому початку файлу після встановлення значення рівня виводу помилок: ??php error_reporting(-1); header('Content-Type: text/html; charset=utf-8'); Для підключення до баз даних MySQL кодування UTF-8 встановлюється так: ??php mysql_set_charset('utf8'); В CSS-файли кодування UTF-8 зазначається так: @charset "utf-8";
    UTF-8 - кодування символів
    При збереженні файлів всіх типів вибирається кодування UTF-8 без BOM, інакше сайт працювати не буде. Для цього в програмі DreamWeave потрібно вибрати пункт меню «Модифікації – Властивості сторінки – Заголовок/Кодування», змінити кодування на UTF-8. Потім слід перезавантажити сторінку, прибрати галочку з пункту «Підключити Юнікод сигнатури (BOM)» і застосувати зміни. Якщо який-небудь текст на сторінці або в базі даних був введений іншою формою кодування, то його потрібно ввести заново або перекодувати. При роботі з регулярними виразами обов'язково використовувати модифікатор u. Також можна зберегти файл у кодуванні UTF-8 в «Блокноті» ОС Windows. Після вибору пункту меню «Файл – Зберегти як» встановити необхідну форму кодування і зберегти файл у кодуванні UTF-8. В текстовому редакторі Notepad++, якщо кодування відмінна від UTF-8 через пункт меню «Перетворити в UTF-8 без BOM» змінити кодування і зберегти в кодуванні UTF-8.
    UTF-8 - кодування символів

    Альтернативи немає

    В умовах глобалізації, коли політичні та мовні кордони стираються, набори символів, які мають місцеві особливості, стають малопридатними. Юнікод є єдиним набором символів з підтримкою всіх локалізацій. А UTF-8 – приклад правильної реалізації Юнікоду, яка:
  • підтримує широкий діапазон інструментальних засобів, у тому числі сумісність з кодуванням ASCII;
  • володіє стійкістю до спотворення даних;
  • проста і ефективна при обробці;
  • не залежить від платформи.
  • З появою UTF-8 дискусії про те, яка форма кодування або набір символів краще, стали безглузді.
    Схожі добрі поради по темі
    Що таке кодування інформації та її обробка?
    Що таке кодування інформації та її обробка?
    Під словом «код» зазвичай розуміють сукупність символів, знаків та правил надання різних даних. Для якісної передачі даних відбувається кодування та
    Чому двійкове кодування є універсальним? Методи програмування
    Чому двійкове кодування є універсальним? Методи програмування
    Комп'ютер обробляє велику кількість інформації. Аудіо-файли, картинки, тексти – все це необхідно відтворити або вивести на екран. Чому двійкове
    Примусове видалення програм: огляд популярних утиліт
    Примусове видалення програм: огляд популярних утиліт
    Видалення шкідливих програм – це те, з чим зв'язувався навіть самий недосвідчений користувач комп'ютера. На жаль, не завжди можна видалити небажаний
    Кодування Юнікод: стандарт кодування символів
    Кодування Юнікод: стандарт кодування символів
    Кожен користувач Інтернету в спробах налаштувати ту чи іншу його функцію хоча б одного разу бачив на дисплеї написане латинськими літерами слово
    Двійкове кодування інформації
    Двійкове кодування інформації
    Стаття оповідає про найдавніші витоки кодування інформації, а також про її сучасному стані. Розкривається поняття двійкового коду.
    Як визначити кодування? Навіщо це потрібно?
    Як визначити кодування? Навіщо це потрібно?
    Кожна програма пишеться з допомогою спеціального коду, який є базовою частиною програмування. Сьогодні ми розповімо про те, як визначити кодування,