На Горох
Информатика, 10 класс

§ 23. Представление и хранение текстовой информации

"Информатика (углублённый уровень)", Калинин И.А., Самылкина Н.Н.

Объяснение темы В оглавлении: § 23. Представление и хранение текстовой информации

Кратко о теме

Текст в компьютере хранится не как последовательность букв, а как набор двоичных данных. Каждому символу по определённым правилам сопоставляется код, а затем коды записываются в файл или передаются по сети. От выбранной кодировки зависят поддерживаемые письменности, объём текста и правильность его отображения. Разберём алфавиты, кодовые таблицы, Unicode, UTF-8 и UTF-16, а также научимся вычислять размер текстовых данных.

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

Алфавит текста — набор символов, которыми можно записывать сообщения: букв, цифр, знаков препинания и других символов. Число символов в алфавите называют его мощностью. Она показывает, сколько разных вариантов нужно различать при кодировании.

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

Код символа — двоичное представление, сопоставленное определённому символу по принятому правилу. Например, букве или цифре назначается своя комбинация нулей и единиц. По такому коду программа восстанавливает исходный знак.

Кодовая таблица описывает соответствие между символами и их кодами. Отправитель и получатель должны пользоваться совместимыми правилами, иначе одинаковые байты будут превращаться в разные знаки. Поэтому при открытии файла важно правильно определить его кодировку.

Как это устроено

Пусть алфавит содержит N символов, а код каждого символа имеет одинаковую длину. L бит дают 2ᴸ комбинаций, поэтому нужно, чтобы 2ᴸ ≥ N. Отсюда минимальная длина равна ⌈log₂ N⌉ битам: результат округляют вверх, ведь дробное число битов использовать нельзя. Например, для 33 символов потребуется уже 6 бит.

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

Однобайтовая кодировка использует 8 бит, то есть может различать не более 256 кодов. Этого достаточно для ограниченного набора, например латинских букв, цифр и знаков, но недостаточно для символов многих письменностей сразу. Кроме того, разные таблицы могут назначить одному и тому же байту разные символы. Поэтому файл, записанный в одной однобайтовой кодировке, при открытии в другой иногда превращается в набор неправильных знаков.

Unicode создаёт единую систему кодов для символов латиницы, кириллицы, иероглифов, математических знаков и других письменностей. Сам Unicode задаёт, какой код относится к символу, но не определяет единственный способ хранения этого кода в байтах. UTF-8 кодирует символы последовательностями длиной от 1 до 4 байтов и сохраняет совместимость с базовой латиницей. UTF-16 обычно использует 2 байта, а для части символов — 4 байта.

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

Сравнение способов представления текстовых символов

СвойствоОднобайтовая кодировкаUTF-8UTF-16
Размер кода символа1 байтОт 1 до 4 байтовОбычно 2, иногда 4 байта
Набор символов и поддержка разных письменностейОграниченный набор, зависит от таблицыСимволы Unicode множества письменностейСимволы Unicode множества письменностей
Как представлены символы вне основного набораМогут отсутствовать или заменятьсяДополнительными байтамиДополнительными кодовыми единицами
Как определить объём текста в байтахЧисло символов умножить на 1Сложить размеры кодов конкретных символовСложить размеры кодовых единиц конкретных символов

Таблицу удобно использовать, когда нужно выбрать кодировку или объяснить различие между системой кодов и способом хранения. Сначала определите набор символов, затем выясните, одинаковую или переменную длину имеют их коды. Для расчёта размера всегда ориентируйтесь на конкретные символы, а не только на название кодировки.

Разбор задач

Задача 1. Алфавит содержит 32 символа. Определите минимальное число битов для кодирования одного символа и объём сообщения из 100 символов при коде фиксированной длины.

  1. Ищем такое L, чтобы 2ᴸ ≥ 32. Так как 2⁵ = 32, пяти битов достаточно для всех символов.
  2. Умножаем длину кода на число символов: 5 · 100 = 500 битов. При фиксированной длине каждый знак занимает одинаковое место.

Ответ: 5 битов на символ, 500 битов на сообщение.

Задача 2. Текст из 240 символов записан в однобайтовой кодировке. Найдите его объём в байтах и битах, не учитывая служебные данные файла.

  1. В однобайтовой кодировке один символ занимает 1 байт. Поэтому объём текста равен 240 · 1 = 240 байт.
  2. Переводим байты в биты: 240 · 8 = 1920 битов. Дополнительные сведения о файле по условию не учитываются.

Ответ: 240 байт, или 1920 битов.

Задача 3. Строка состоит из 10 латинских и 5 кириллических букв. В UTF-8 латинская буква занимает 1 байт, а кириллическая — 2 байта. Найдите объём строки.

  1. Считаем объём латинских букв: 10 · 1 = 10 байт. Их нельзя складывать с кириллическими до определения размера, потому что длина кодов различается.
  2. Считаем объём кириллических букв: 5 · 2 = 10 байт.
  3. Складываем результаты: 10 + 10 = 20 байт.

Ответ: строка занимает 20 байт.

Типичные ошибки

Не округлять log₂ N вверх. Иногда считают дробный результат готовым числом битов, но фиксированный код не может иметь, например, 4,3 бита. Проверьте себя условием 2ᴸ ≥ N и возьмите ближайшее целое L.

Считать, что символ всегда занимает один байт. Такое правило верно только для однобайтовой кодировки. Уточните кодировку и размер именно данного символа, особенно если используется UTF-8 или UTF-16.

Путать Unicode с UTF-8 и UTF-16. Unicode определяет систему кодов символов, а UTF-8 и UTF-16 задают способы представления этих кодов в байтах. Для проверки спросите себя: речь идёт о таблице символов или о формате хранения?

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

Связь с другими темами

Для понимания темы нужны двоичная система счисления, понятия бита и байта, а также умение переводить числа между системами счисления. Эти знания объясняют, почему один байт содержит 8 битов и сколько различных кодов можно получить.

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

Что запомнить

  • Текст в компьютере хранится как последовательность двоичных данных.
  • Символам сопоставляются коды по определённым правилам.
  • Минимальная длина фиксированного кода для алфавита из N символов равна ⌈log₂ N⌉ битам.
  • Один символ не обязательно занимает один байт.
  • UTF-8 и UTF-16 могут кодировать символы последовательностями разной длины.
  • Для правильного чтения текста важно знать, как он был закодирован.

Частые вопросы по теме

Почему для кодирования 32 символов достаточно пяти бит?

Пять бит дают 2⁵ = 32 различных комбинации. Поэтому каждой из 32 букв или знаков можно назначить отдельную комбинацию.

Почему один и тот же текст может занимать разное место в разных кодировках?

Кодировки используют разные правила и разную длину кодов. Например, символ в однобайтовой кодировке занимает 1 байт, а в UTF-8 некоторые символы — 2, 3 или 4 байта.

Чем Unicode отличается от UTF-8?

Unicode задаёт единую систему кодов для символов разных письменностей. UTF-8 — это способ представить эти коды последовательностями байтов переменной длины.

Сколько байтов занимает кириллическая буква в UTF-8?

Обычно кириллическая буква занимает 2 байта в UTF-8. Точный размер зависит от конкретного символа, поэтому для специальных знаков правило может отличаться.

Почему текст иногда отображается набором непонятных символов?

Обычно файл читают не в той кодировке, в которой его записали. Одна и та же последовательность байтов при разных кодовых таблицах может означать разные символы.

Спросить по теме параграфа

§ 23. Представление и хранение текстовой информации

Учебник

Оглавление →
Предмет
Информатика
Класс
10 класс
Учебник
"Информатика (углублённый уровень)", Калинин И.А., Самылкина Н.Н.