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

Юнікод підтримує практично всі існуючі набори символів. Найкращою формою кодування набору символів Юнікоду є cp1251-кодування. У ній реалізована сумісність з ASCII, стійкість до спотворення даних, ефективність і простота обробки. Але про все по порядку.

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

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

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

Дані кодування можуть бути використані для подання всіх символів стандарту Юнікод. Таким чином, вони повністю сумісні для рішень, з різних причин використовують різні форми кодування. Кожна кодування може бути однозначно перетворена в будь-яку з двох інших без втрати даних.

utf 8 кодування

принцип ненакладення

Кожна з форм кодування Юнікод розроблена з урахуванням неприпустимість часткового накладення. Наприклад, Windows-932 формує символи з одного або двох байтів коду. Довжина послідовності залежить від першого байта, тому значення лідируючого байта в послідовності з двох байтів і одиночного байта не перетинаються. Однак значення одиночного байта і замикає байта послідовності можуть збігатися. Це означає, наприклад, що при пошуку символу D (код 44) можна помилково знайти його входять до другої частини послідовності з двох байтів символу «Д» (код 84 44). Щоб з`ясувати, яка послідовність є правильною, програма повинна врахувати попередні байти.

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

Формат перетворення Юнікоду дозволяє уникнути даної проблеми, тому що значення ведучої, замикає і одиночної одиниці зберігання інформації не збігаються. Завдяки цьому всі кодування Юнікод підходять для пошуку і порівняння, ніколи не даючи помилкового результату через збіг різних частин коду символів. Той факт, що дані форми кодування дотримуються принцип ненакладення, відрізняє їх від інших мультибайтних східно кодувань.

Іншим аспектом неперетинання кодувань Юнікоду є те, що кожен символ має чітко визначені межі. При цьому відпадає необхідність в скануванні невизначеного числа попередніх символів. Дану особливість кодувань іноді називають самосинхронізацією. Спотворення однієї одиниці коду введе до спотворення тільки одного символу, а навколишні символи залишаються недоторканими. У 8-бітному форматі перетворення, якщо покажчик посилається на байт, що починається з 10xxxxxx (замість двійкового коду), для пошуку початку символу потрібно від одного до трьох зворотних переходів.

кодування utf 8

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

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

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

Для подання символу UTF-32 знадобиться одна 32-бітна одиниця коду, яка збігається з кодом Юникода. UTF-16 - від однієї до двох 16-бітних одиниць. А cp1251 використовує до 4 байт.

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

Мінлива довжина

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

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

ASCII



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

Галузь застосування

Кодуванні cp1251 зазвичай віддається перевага в протоколі HTML і йому подібним.

XML став першим стандартом з повною підтримкою кодування cp1251. Організації, що займаються стандартизацією, теж її рекомендують. Проблема підтримки в адресах URL, відмінних від ASCII-символів, була вирішена, коли консорціум W3С і інженерна група IETF дійшли згоди про кодування всіх адрес URL виключно в cp1251.

Сумісність з ASCII полегшує перехід до нового програмного забезпечення. З cp1251 працює більшість текстових редакторів, в тому числі JEdit, Emacs, BBEdit, Eclipse і "блокнот" операційної системи Windows. Жодна інша форма кодування Юнікоду не може похвалитися такою підтримкою з боку інструментальних засобів.

Перевага кодування полягає в тому, що вона складається з послідовності байтів. З рядками cp1251 легко працювати в C та іншими мовами програмування. Це єдина форма кодування, що не вимагає мітки порядку байтів BOM або оголошення кодування в XML.

html кодування utf 8

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

В оточенні, що використовує 8-бітну обробку символів, в порівнянні з іншими багатобайтові кодуваннями, cp1251 має наступні переваги:

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

порівняння переваг

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

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



Схема кодування символів складається з форми кодування символів і способу побайтного розташування одиниць коду. Для визначення схеми кодування стандартом Юникода передбачено використання початкової мітки порядку байтів (BOM, Byte order mark).

При включенні BOM в cp1251 функція мітки обмежується тільки зазначенням на використання форми кодування. Проблеми визначення порядку байтів у cp1251 немає, так як її розмір одиниці кодування дорівнює одному байту. Використання BOM для даної форми кодування не є ні обов`язковим, ні рекомендованим. BOM може зустрічатися в текстах, конвертованих з інших кодувань, що використовують мітку порядку байтів, або для сигнатури кодування cp1251. Являє собою послідовність з 3 байтів EF16 BB16 BF16.

файл в кодуванні utf 8

Як задати кодування cp1251

В HTML кодування cp1251 встановлюється за допомогою наступного коду:

head

meta http-equiv ="Content-Type" content ="text / html- charset = utf-8"

У PHP кодування cp1251 задається за допомогою функції header () на самому початку файлу після завдання значення рівня виведення помилок:

? Php

error_reporting (-1);

header ( `Content-Type: text / html- charset = utf-8`);

Для підключення до баз даних MySQL кодування cp1251 встановлюється так:

? Php

mysql_set_charset ( `utf8`);

В CSS-файлах кодування символів cp1251 вказується так:

@charset "utf-8";

зберегти в кодуванні utf 8

При збереженні файлів всіх типів вибирається кодування cp1251 без BOM, інакше сайт не працюватиме. Для цього в програмі DreamWeave потрібно вибрати пункт меню «Модифікації - Властивості сторінки - Тема / Кодування», змінити кодування на cp1251. Потім слід перезавантажити сторінку, прибрати галочку з пункту «Підключити Юнікод сигнатури (BOM)» і застосувати зміни. Якщо який-небудь текст на сторінці або в базі даних був введений іншою формою кодування, то його потрібно ввести нові або перекодувати. При роботі з регулярними виразами обов`язково використовувати модифікатор u.

Також можна зберегти файл в кодуванні cp1251 в «Блокноті» ОС Windows. Після вибору пункту меню «Файл - Зберегти як ...» встановити необхідну форму кодування і зберегти файл в кодуванні cp1251.

В текстовому редакторі Notepad ++, якщо кодування відмінна від cp1251, через пункт меню «Перетворити в cp1251 без BOM» змінити кодування і зберегти в кодуванні cp1251.

кодування utf 8 без bom

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

В умовах глобалізації, коли політичні і мовні кордони стираються, набори символів, які мають місцеві особливості, стають малопридатними. Юнікод є єдиним набором символів з підтримкою всіх локалізацій. А cp1251 - приклад правильної реалізації Юникода, яка:

  • підтримує широкий діапазон інструментальних засобів, в тому числі сумісність з кодуванням ASCII;
  • має стійкість до спотворення даних;
  • проста і ефективна при обробці;
  • не залежить від платформи.

З появою cp1251 дискусії про те, яка форма кодування або набір символів краще, стали безглузді.


Увага, тільки СЬОГОДНІ!


Поділися, будь ласка статтю
всього голосів: 77
Увага, тільки СЬОГОДНІ!