P
pro·school.ru
Каталог школ

Кодировка Юникод и 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, что обеспечивает совместимость.