Кодировка Юникод и UTF-8
💻 Информатика · 8 класс
Зачем понадобился Юникод
Таблица ASCII кодирует всего 128 символов и рассчитана на латиницу. Для русского, греческого, китайского и сотен других алфавитов её не хватает. Долгое время каждый язык использовал свою кодовую страницу, и один и тот же байт в разных таблицах означал разные буквы — отсюда знаменитые «кракозябры». Юникод (Unicode) решает эту проблему: это единая таблица, куда внесены символы практически всех письменностей мира.
Кодовые позиции
В Юникоде каждому символу присвоен уникальный номер — кодовая позиция. Стандарт предусматривает более миллиона позиций, и в них помещаются буквы, цифры, знаки, математические символы и значки. Например, кириллической букве «А» соответствует своя позиция, отличная от латинской «A».
Кодировка UTF-8
Сам номер символа надо как-то записать в память в виде байтов. Для этого служат форматы кодирования, и самый распространённый — UTF-8. Его главное достоинство — переменная длина: часто встречающиеся символы занимают мало места.
| Группа символов | Сколько байтов в UTF-8 |
|---|---|
| Латиница, цифры (совпадают с ASCII) | 1 байт |
| Кириллица, многие европейские буквы | 2 байта |
| Многие азиатские символы | 3 байта |
| Редкие символы, значки | 4 байта |
Разбор примера
Слово «Дом» в кодировке UTF-8: каждая русская буква занимает 2 байта, значит всё слово —3 * 2 = 6байт. Слово «Dom» латиницей займёт3 * 1 = 3байта, потому что латинские буквы кодируются одним байтом.
Важно, что первые 128 позиций Юникода полностью совпадают с ASCII, поэтому старые латинские тексты остаются совместимыми и читаются без изменений.
Частые ошибки. Считают, что в UTF-8 любой символ занимает ровно один байт — это верно только для латиницы. Путают понятия «Юникод» (таблица символов) и «UTF-8» (способ записи в байты). Забывают, что русская буква обычно весит 2 байта, и неверно оценивают объём текста.
Почему появились «кракозябры»
До распространения Юникода для русского языка существовало несколько разных кодовых таблиц. В каждой из них один и тот же байт обозначал разные буквы. Если текст создавали в одной кодировке, а открывали в другой, вместо русских слов появлялись бессмысленные наборы знаков — их в шутку называли «кракозябрами». Юникод устранил эту путаницу: теперь у каждого символа во всём мире один-единственный номер, и неоднозначность исчезает.
Другие форматы записи
Кроме UTF-8 существуют и иные форматы, например UTF-16, где большинство символов занимают по 2 байта. Но именно UTF-8 стал основным форматом в интернете, потому что он экономно хранит латинский текст и полностью совместим с ASCII. Веб-страницы по умолчанию используют именно эту кодировку.
| Свойство | ASCII | Юникод (UTF-8) |
|---|---|---|
| Число символов | 128 | более миллиона |
| Поддержка кириллицы | нет | да |
| Размер латинской буквы | 1 байт | 1 байт |
| Размер русской буквы | — | 2 байта |
Кратко о главном
- Юникод — единая таблица символов всех письменностей мира.
- Каждому символу соответствует своя кодовая позиция.
- UTF-8 — способ записи символов байтами переменной длины.
- Латиница занимает 1 байт, кириллица — обычно 2 байта.
- Первые 128 позиций совпадают с ASCII, что обеспечивает совместимость.