Все разделы
Выбрать школу

Школа. Увлечения. Большое будущее.

PROSCHOOLS · ОБРАЗОВАНИЕ РЯДОМ

Ваш город

Выберите город, чтобы находить образование и возможности рядом.

Как учитываем городКаталог и кнопки «Выбрать школу» покажут школы выбранного города.Онлайн-курсы, учебник, ГДЗ и задания к экзаменам доступны по всей России.

Популярные города

Будет выбран: Вся Россия

Учебные материалы останутся прежними.

Поиск по сайту

По всему сайтуШколы выбранного города — выше в результатах

С чего начнём?

↑ ↓ — выбрать результат · Enter — открыть · Esc — закрыть

Кодировка Юникод и UTF-8

💻 Информатика · 8 класс

Зачем понадобился Юникод, чем он отличается от ASCII и сколько байтов занимает символ в UTF-8.

Программный код на экране
Программный код на экранеMartin Vorel · Wikimedia Commons · CC BY-SA 4.0

Зачем понадобился Юникод

Таблица 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, что обеспечивает совместимость.