Ми вже розібралися з кодуванням цілих і дійсних чисел - і ті і інші представляються у вигляді двійкового коду. Дивно було б очікувати чогось іншого від текстової інформації.
Текст кодується посимвольний. тобто, кожен символ кодується таким собі однозначним чином, а текст являє собою масив символів.
Кількість біт, що відводяться на символ, і, власне, відповідність певного коду певного символу називається кодуванням.
Кодування правило, що задає однозначне зіставлення кінцевого безлічі символів алфавіту (зазвичай елементів тексту: літер, цифр, розділових знаків) і послідовностей довжиною в один або кілька символів іншого алфавіту (крапок і тире в коді Mорзе, сигнальних прапорів на флоті, нулів і одиниць (бітів ) у комп'ютері).
Кодування можуть мати різну фіксовану бітность. тобто відводити свідомо відоме кількість біт під кодування одного символу, а можуть мати змінну бітность.
American standard code for information interchange - американський стандартний код обміну інформацією.
Розроблено в 1963 році, і в деякій формі використовується до сих пір.
ASCII є, по факту, семібітной кодуванням, однак зараз кожен символ зберігається в 8 бітах, і старший біт завжди встановлений в 0.
Всього в ASCII представимо, як можна здогадатися, 128 символів. В їх число входять: 32 керуючих символу, цифри, знаки пунктуації та математичні символи, великі і малі літери латинського алфавіту, арабські цифри.
В даний час багато хто з керівників символів використовуються рідко. Найбільш часто використовувані:
- 0, 016. NUL, \ 0 - нульовий символ, використовується в багатьох мовах програмування як маркер кінця рядка.
- 4, 416. EOT - "кінець передачі". Використовується в деяких системах (зокрема Unix-сумісних) як маркер закінчення введення.
- 7, 716. BEL, \ a - отримало пристрій передає користувачеві сигнал (зазвичай писк)
- 8, 816. BS, \ b - використовується або для видалення останнього символу, або для друку "поверх" нього.
- 9, 916. HT, \ t - горизонтальна табуляція, використовується для вирівнювання рядків
- 10, A16. LF, \ n - "перенесення рядка", маркер кінця рядка в варіантах Unix
- 11, B16. VT, \ v - вертикальна табуляція
- 12, C16. FF, \ f - очищає екран терміналу або, при друку, поточну сторінку
- 13, D16. CR, \ r - "повернення каретки" - переміщує курсор на початок рядка. Використовується як маркер кінця рядка в Mac OS. \ R \ n використовується як маркер кінця рядка в Windows.
- 27, 1B16. ESC - "ескейп", використовується для введення команд управління терміналом.
- 127, 7F16. DEL - в деяких системах використовується для видалення символу.
Використання 8 біт для зберігання 7-бітних ASCII-символів дозволяє доповнювати кодування ASCII символами національних алфавітів, встановлюючи старший біт в 1.
Для російської мови широкого поширення набули наступні кодування:
- CP866 - широко використовувалася в MS-DOS
- KOI8-R - широко використовувалася в Unix-подібних ОС (Linux, BSD)
- CP1251 - широко використовувалася (і частково використовується до сих пір) ОС сімейства Windows.
Описово, CP866, крім російських букв, містить псевдографічні символи, KOI8-R побудована таким чином, щоб на терміналах, які підтримують тільки семібітний ASCII російський текст перетворювався в трансліт з інвертованим регістром (великі літери ставали маленькими, а маленькі - великими), а CP1251 містить практично всі друкарські символи і, крім російських, включає українські та білоруські символи.
Приблизно одночасно з UCS з'явився стандарт Unicode, котрий використовував 16 біт для кодування символів.
В результаті подальшої еволюції, UCS і Unicode стали розроблятися спільно. На поточний момент, існує три поширених кодування:
Підтримка UTF-32 реалізована далеко не скрізь. Незважаючи на те, що використовуються 32 біта, фактично значущими є молодші 31. Теоретичний максимум - 2 147 483 647 символів. Практично поточний стандарт допускає всього 1 114 111 різних кодів, хоча в майбутньому цей діапазон може бути розширений. UTF-32 - кодування фіксованої довжини.
UTF-16 реалізує підтримку всіх основних символів сучасних мов, плюс безліч спеціальних символів, таких як математичні символи, що управляють, діакритичні знаки і т.п. Символ кодується одним або двома "словами" за 16 біт. Всього можливе 1 112 064 різних кодів. У старих реалізаціях, працюють тільки коди з одного "слова".
UTF-8, кодується одним або декількома октетами (по 8 біт), і є обернено-сумісної з ASCII. На поточний момент UTF-8 є найбільш популярною універсальною кодуванням: переважна більшість Unix-подібних ОС і переважна більшість сторінок Інтернету використовують саме її.
Кодування UTF-8 як кодування змінної довжини
В UTF-8 символи кодуються так:
- Якщо кодується ASCII-символ, то старший біт встановлюється в 0, а інші 7 біт представляють код ASCII-символу.
- Інакше, перші 8 біт містять n одиниць, де n - кількість байт в кодованому символі (тобто, мінімум 2 одиниці), за якими слід 0. Решта біти представляють частину коду символу.
- Наступні блоки по 8 біт починаються на 10 (старший біт встановлений в 1, наступний - в 0), а інші біти представляють частину коду символу.
Максимальна довжина коду символу в UTF-8 - 6 байт. Мінімальна - 1 байт.
Таким чином, технічно UTF-8 може кодувати будь-яку послідовність з UTF-32.
Слід зауважити, що поточна версія стандарту Unicode 6 передбачає максимальний код 10FFFF16. для кодування якого в UTF-8 досить 4 байт.
Теоретично, можливо кодування понад 31 біта в UTF-8, однак зараз це не використовується. Проте, якщо перші 8 біт встановлено в 1, то наступні 8 біт теж можуть бути інтерпретовані як кількість байт в коді.