Кодування - це відображення між байтами та символами з набору символів, тому буде корисно обговорити та зрозуміти різницю між байтами та символами .
Розгляньте байти як числа між 0 і 255, тоді як символи - це абстрактні речі, такі як "a", "1", "$" і "Ä". Набір усіх доступних символів називається набором символів .
Кожен символ має послідовність одного або декількох байтів, які використовуються для його представлення; однак, точна кількість та значення байтів залежить від кодування, що використовується, і існує багато різних кодувань.
Більшість кодувань засновані на старому наборі символів і кодуванні під назвою ASCII, що є одним байтом на символ (насправді всього 7 біт) і містить 128 символів, включаючи безліч загальних символів, які використовуються в англійській мові США.
Наприклад, ось 6 символів у наборі символів ASCII, які представлені значеннями від 60 до 65.
Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║ Character ║
╠══════╬══════════════║
║ 60 ║ < ║
║ 61 ║ = ║
║ 62 ║ > ║
║ 63 ║ ? ║
║ 64 ║ @ ║
║ 65 ║ A ║
╚══════╩══════════════╝
У повному наборі ASCII найменше використане значення дорівнює нулю, а найвище - 127 (обидва з них є прихованими контрольними символами).
Однак, як тільки ви починаєте потребувати більше символів, ніж передбачено базовим ASCII (наприклад, листи з наголосами, символи валюти, графічні символи тощо), ASCII не підходить, і вам потрібно щось більш масштабне. Вам потрібно більше символів (різний набір символів), і вам потрібно інше кодування, оскільки 128 символів недостатньо, щоб вмістити всіх символів. Деякі кодування мають один байт (256 символів) або до шести байт.
З часом було створено багато кодувань. У світі Windows існує CP1252 або ISO-8859-1, тоді як користувачі Linux, як правило, віддають перевагу UTF-8. Java використовує UTF-16 на самому світі.
Одна послідовність значень байтів для символу в одному кодуванні може означати зовсім інший символ в іншому кодуванні, або навіть може бути недійсною.
Наприклад, в ISO 8859-1 , â представлений одним байта значення 226
, тоді як в UTF-8 це два байт: 195, 162
. Однак, в ISO 8859-1 , 195, 162
буде два символу, а, ¢ .
Коли комп'ютери зберігають дані про символів всередині або передають їх іншій системі, вони зберігають або надсилають байти. Уявіть, що система, яка відкриває файл або отримує повідомлення, бачить байти 195, 162
. Звідки відомо, що це символи?
Для того, щоб система інтерпретувала ці байти як фактичні символи (і таким чином відображала їх або перетворювала їх на інше кодування), вона повинна знати кодоване, що використовується. Ось чому кодування з’являється в заголовках XML або може бути вказане в текстовому редакторі. Він повідомляє системі відображення між байтами та символами.