Задание № 2 · ОГЭ

Сравнение кодировок текста

Как определить число символов и байтов текста в ASCII, Юникоде и UTF-8
5 мин чтенияСложность: Обновлено 29 сентября 2026

Чтобы сравнить объём текста в разных кодировках, сначала считают количество символов, а затем определяют, сколько байтов занимает каждый символ в выбранной кодировке. Важно не путать число символов с размером файла: одна и та же строка может содержать одинаковое число символов, но занимать разное количество байтов.

Основные понятия

Размер текстового файла обычно измеряют в байтах. Байты хранят не «буквы вообще», а их числовые коды, заданные определённой кодировкой. Поэтому для ответа нужно знать и содержание текста, и правило кодирования.

D
Символ и кодировка

Символ — элемент текста: буква, цифра, пробел, знак препинания или служебный знак перевода строки. Кодировка символов — правило, сопоставляющее символам двоичные коды. Число символов зависит от текста, а число байтов — от текста и кодировки.

При подсчёте символов учитывают каждый знак, если условие не говорит обратное: буквы, цифры, пробелы, точки, запятые, скобки и обычно символы перевода строки. Слово из пяти букв и пробел между словами дают шесть символов.

Что считать первым

Сначала перепишите текст и посчитайте все его символы. Не заменяйте несколько цифр одним числом: запись «2025» содержит четыре символа. Аналогично, слово «тест» содержит четыре символа.

ASCII: один символ — один байт

ASCII — таблица кодов для 128 символов: латинских букв, цифр, знаков препинания и управляющих символов. В школьных задачах символ ASCII занимает 1 байт, то есть 8 бит, хотя исходная таблица использует 7 значащих битов.

\[1\ \text{символ ASCII}=1\ \text{байт}=8\ \text{бит}\]

Если текст состоит только из символов ASCII и содержит \(N\) символов, его размер без учёта дополнительных служебных данных равен \(N\) байтам. К ASCII относятся, например, латинские буквы A–Z и a–z, цифры 0–9, пробел и многие знаки препинания. Русские буквы в ASCII не входят.

T
Правило для ASCII

Для текста из \(N\) ASCII-символов размер равен \(N\) байтам, или \(8N\) битам.

Юникод и UTF-8

Кодовая позиция символа в Юникоде — это номер символа в едином наборе, включающем латиницу, кириллицу, иероглифы, математические знаки и эмодзи. Само слово «Юникод» обозначает набор символов и кодовых позиций, а не единственный способ хранения в байтах.

UTF-8 — способ записать кодовые позиции Юникода последовательностями байтов. Он совместим с ASCII: любой ASCII-символ в UTF-8 занимает ровно 1 байт. Большинство русских букв занимает 2 байта, многие другие символы — 3 или 4 байта.

Символ или группа символовРазмер в UTF-8
ASCII-символ: A, 7, пробел, !1 байт
Большинство кириллических букв: А, б, я2 байта
Многие знаки и иероглифы3 байта
Некоторые эмодзи и редкие символы4 байта
\[B_{\text{UTF-8}}=\sum_{i=1}^{N} b_i\]

Здесь \(N\) — число символов, а \(b_i\) — количество байтов для \(i\)-го символа. Если известны количества групп символов, удобнее сложить их вклад: \(B=n_1\cdot1+n_2\cdot2+n_3\cdot3+n_4\cdot4\).

i
Важная оговорка о слове «Юникод»

В некоторых школьных задачах под «кодировкой Юникод» условно понимают фиксированное хранение: 2 байта на символ. Это правило действует только тогда, когда оно явно дано в условии или принято в используемой модели. Нельзя автоматически считать любой Юникод равным 2 байтам: UTF-8 — переменная кодировка.

Микро-проверка

Сколько байтов занимает строка «AБ» в UTF-8, если «A» — ASCII-символ, а «Б» — русская буква?

Алгоритм сравнения объёма

  1. Записать текст точно, включая пробелы и знаки препинания.
  2. Посчитать общее число символов \(N\) или отдельно посчитать группы символов.
  3. Уточнить кодировку и правило хранения одного символа.
  4. Для ASCII умножить число символов на 1 байт.
  5. Для UTF-8 определить размер каждого символа или каждой группы и сложить результаты.
  6. Если требуется сравнить результаты, привести их к одной единице: байтам или битам.
T
Сравнение в одинаковых единицах

Сравнивать размеры можно только после перевода в одну единицу. \(1\) байт \(=8\) бит, \(1\) Кбайт в школьных задачах часто принимают равным \(1024\) байтам, если это указано или следует из условия.

Разобранный пример

№
Пример

Сравним размер строки «Cat Кот!» в ASCII и UTF-8. Считаем, что пробел и восклицательный знак входят в текст, а перевод строки отсутствует.

1
Считаем символы: C, a, t, пробел, К, о, т, ! — всего 8 символов.
N=8
2
В ASCII русские буквы не представлены, поэтому строку целиком в ASCII закодировать нельзя. Если условие рассматривает только допустимые ASCII-символы «Cat !», их 5.
\(\displaystyle N_{\text{ASCII}}=3+1+1=5\)
3
Каждый из пяти допустимых ASCII-символов занимает 1 байт.
\(\displaystyle B_{\text{ASCII}}=5\cdot1=5\ \text{байт}\)
4
В UTF-8 латинские буквы, пробел и знак «!» занимают 1 байт, а три русские буквы — по 2 байта.
\(\displaystyle B_{\text{UTF-8}}=5\cdot1+3\cdot2=11\ \text{байт}\)
5
Сравниваем полученные размеры в байтах.
11>5

В таком примере важно явно отметить, что вся исходная строка не помещается в классический ASCII: русские буквы требуют другой кодировки. Если в задаче сказано, что «русский текст в ASCII» занимает 1 байт на символ, это уже специальная условная модель, которую нужно использовать буквально.

Частые ошибки

!
Ошибки, которые приводят к неверному ответу

1. Считают только буквы и забывают пробелы или знаки препинания. 2. Принимают количество слов за количество символов. 3. Считают любую букву UTF-8 одним байтом. 4. Смешивают биты и байты: 8 бит — это 1 байт. 5. Считают, что Юникод всегда означает 2 байта. 6. Забывают проверить, можно ли вообще представить данный текст в ASCII. 7. Учитывают кавычки, перенос строки или завершающий нулевой байт, хотя условие их не включает.

Для более сложных задач полезно отдельно рассмотреть Количество символов в тексте и Длину двоичного кода. Если требуется работать не с текстом, а с числом в памяти, применяются другие правила из темы Представление числа в памяти.

Quick-test

Q
Быстрый тест по теме

Проверьте себя

~ 2 мин4 вопроса
Вопрос 1 / 4
Вопрос 1 из 4 · ASCII
Сколько байтов занимает 20 ASCII-символов?
Главное за минуту

Главное

  • Число символов определяется текстом, а число байтов — текстом и кодировкой.
  • В школьной модели ASCII занимает 1 байт на символ, но русские буквы в классический ASCII не входят.
  • UTF-8 использует от 1 до 4 байтов на символ; ASCII-символы занимают 1 байт, большинство русских букв — 2 байта.
  • «Юникод» — набор символов, а не обязательно правило «2 байта на символ». Такое правило используют только при явном указании в условии.
  • Сначала считают символы и группы символов, затем складывают их байтовые размеры и при необходимости переводят байты в биты.