ASCII та Unicode: що це і навіщо потрібні

Комп'ютер розуміє лише числа, тож кожна літера на екрані — це код. ASCII була першою таблицею кодів, що стала стандартом, а Unicode — та, якою ми користуємося сьогодні, щоб писати будь-якою мовою. Тут ви побачите, як вони працюють, які коди варто знати, чому замість діакритики іноді з'являються дивні символи та як переглянути все в таблиці.

Оновлено:

Що таке кодування символів

Кодування — це домовленість: «число 65 означає літеру A». Коли ви пишете текст, програма зберігає ці числа; коли інша людина його відкриває, її програма перетворює їх назад на літери за тією самою домовленістю. Якщо обидві не користуються однією таблицею, текст виходить неправильним.

Слід розрізняти дві ідеї. Перша — набір символів, тобто перелік того, яким числам які символи відповідають. Друга — те, як ці числа зберігаються в байтах. В ASCII вони збігаються тривіально; в Unicode — ні, і тут з'являється UTF-8.

ASCII: 128 символів по 7 бітів

ASCII (абревіатура від American Standard Code for Information Interchange) стандартизували в 1960-х роках. Вона використовує 7 бітів, тобто 2 у степені 7 = 128 кодів, від 0 до 127. З них 33 — керівні символи (від 0 до 31 і 127), а 95 — символи для друку (від 32 до 126, враховуючи пропуск).

У ній немає ні літер із діакритикою, ні ñ, ні знака євро: її створили для англійської. Це пояснює, чому згодом знадобилися інші таблиці.

Коди, які ви зустрічатимете найчастіше. Пропуск (32) вважається символом для друку, хоча його не видно.
Керівний символДесятковеШістнадцятковеДвійкове (7 бітів)Для чого потрібен
Нуль (NUL)0000000000Позначає кінець рядка в багатьох мовах
Горизонтальна табуляція (TAB)9090001001Переходить до наступної позиції табуляції
Переведення рядка (LF)100A0001010Опускається на наступний рядок
Повернення каретки (CR)130D0001101Повертається на початок рядка
Escape (ESC)271B0011011Починає керівні послідовності
Пропуск32200100000Перший символ для друку
Видалення (DEL)1277F1111111Стирає символ

Співвідношення, які варто запам'ятати

Таблиця впорядкована невипадково. Кілька закономірностей дозволяють читати коди напам'ять.

Кінець рядка: LF, CR і CRLF

Переведення рядка здається простою річчю, але в різних системах його записують по-різному. Unix, Linux і macOS використовують один символ — LF (10). Windows використовує два поспіль, CR і LF (13 і 10), відомі як CRLF. Старі телетайпи потребували двох різних команд: повернути каретку на початок і посунути папір на один рядок.

Ця різниця — причина файлів, які у простому редакторі виглядають як один суцільний рядок або мають дивний символ наприкінці кожного рядка. Щоб дізнатися, який код має кожен із них, введіть LF або CR у пошуку таблиці ASCII.

«Розширений ASCII» — не стандарт

Оскільки байт має 8 бітів, а ASCII використовує лише 7, лишалося 128 вільних кодів (від 128 до 255), і кожен виробник та регіон заповнював їх по-своєму. Це називають «розширеним ASCII», але єдиної таблиці не існує: їх багато, і їх називають кодовими сторінками. Дві з найвідоміших — Latin-1 (ISO-8859-1), де літера é має код 233, і Windows-1252, схожа, але з відмінностями в кодах від 128 до 159 (там, наприклад, є євро). Для кирилиці були свої сторінки, як-от Windows-1251 і KOI8-U.

Проблема в тому, що код 233 означає «é» в одній таблиці й щось інше в іншій. Текст, написаний за однією таблицею й прочитаний за іншою, показував нісенітницю. Unicode з'явився, щоб покласти край цьому безладу.

Unicode та UTF-8

Unicode присвоює унікальне число, яке називають кодовою точкою, кожному символу майже всіх систем письма світу, а також символам і емодзі. Сьогодні в ньому понад 150 000 символів. Кодову точку записують із префіксом U+ у шістнадцятковій системі: «A» — це U+0041, «ñ» — U+00F1, євро — U+20AC, а емодзі усміхненого обличчя — U+1F600. Перші 128 кодових точок — це в точності ті самі, що в ASCII.

UTF-8 — найпоширеніший спосіб зберігати ці числа в байтах, і він використовує від 1 до 4 байтів залежно від символу. 128 символів ASCII займають один байт, ідентичний колишньому, тому текст ASCII є також правильним текстом UTF-8. Решта займає більше байтів.

Що далі від ASCII, то більше байтів займає символ.
СимволКодова точкаБайтів в UTF-8Байти (шістнадцяткові)
AU+0041141
éU+00E92C3 A9
ñU+00F12C3 B1
€U+20AC3E2 82 AC
😀U+1F6004F0 9F 98 80

Чому замість «ñ» з'являється «Ã±»

Це найпоширеніша помилка, і в неї є точне пояснення. Літера ñ в UTF-8 — це два байти: C3 і B1. Якщо програма вважає, що текст у Latin-1, вона читає кожен байт як окремий символ: C3 — це «Ã», а B1 — «±». Результат: «Ã±». Те саме відбувається з «é», яка виглядає як «Ã©», і зі словом «canción», яке з'являється як «canción». Кирилиця в таких випадках перетворюється на довгі ряди символів на кшталт «Ð¿Ñ€…».

Рішення майже завжди таке: вказати програмі відкрити файл як UTF-8 (у текстовому редакторі або в налаштуваннях імпорту електронної таблиці). Коли виходить навпаки, тобто текст у Latin-1 читають як UTF-8, зазвичай з'являються ромби зі знаком питання, бо окремі байти не утворюють правильних послідовностей UTF-8.

Як користуватися таблицею ASCII та конвертером

Інструмент «Таблиця ASCII» показує 128 символів з їхнім кодом у десятковій, шістнадцятковій, вісімковій і двійковій системах та назвою керівних символів.

  1. Введіть у полі «Знайти символ або код» символ, код або назву керівного символу (наприклад A, 65, 41 чи LF), щоб знайти його рядок.
  2. Скористайтеся кнопками фільтра («Керівні», «Цифри», «Великі літери», «Малі літери», «Знаки»), щоб побачити лише одну групу.
  3. Щоб перетворити, введіть текст у «Текст» і виберіть «Формат кодів» (десятковий, шістнадцятковий, вісімковий або двійковий): унизу з'являться коди. «Hola» дає 72 111 108 97 у десятковій і 48 6F 6C 61 у шістнадцятковій.
  4. Можна й навпаки: вставте коди, розділені пробілами чи комами, в «Коди», і збудується текст. У шістнадцятковій приймаються префікси на кшталт 0x41.

Якщо в тексті є символи не з ASCII, як-от ñ, інструмент повідомляє про це й показує їхній код Unicode. Щоб побачити реальні байти в UTF-8, скористайтеся «Текст у двійковий код»: літера ñ дає 11000011 10110001, два байти по 8 бітів. Обмеження: таблиця показує лише стандартний ASCII, а не розширений, і все обчислюється у вашому браузері без надсилання тексту на жоден сервер.

Поширені запитання

Скільки символів в ASCII?

128, із кодами від 0 до 127, по 7 бітів кожен. З них 33 керівні, а 95 призначені для друку, враховуючи пропуск.

Який код ASCII має літера A і a?

«A» — це 65 (41 у шістнадцятковій, 01000001 у двійковій), а «a» — 97 (61 у шістнадцятковій, 01100001 у двійковій). Вони завжди відрізняються на 32.

У чому різниця між ASCII та Unicode?

ASCII має 128 символів, розрахованих на англійську. Unicode має понад 150 000, майже всіх мов і емодзі, а його перші 128 збігаються з ASCII.

Що таке UTF-8?

Це найпоширеніший спосіб зберігати текст Unicode в байтах. Він використовує від 1 до 4 байтів на символ: символи ASCII займають один, літера ñ — два, а емодзі — чотири.

Чому мій текст показує «Ã±» або «Ã©»?

Тому що текст, збережений в UTF-8, читають як Latin-1. Відкрийте файл із вказівкою кодування UTF-8, і це виправиться.