"Информатика (базовый уровень)", Угринович Н.Д.
Компьютер хранит текст не в виде привычных букв, а как последовательности нулей и единиц. Чтобы записать и прочитать сообщение, каждому символу назначают код, а правила соответствия фиксируют в кодовой таблице. Число бит для одного символа зависит от размера алфавита: код должен позволять различать все его символы. Разберём, как устроено такое кодирование, чем отличаются ASCII и Unicode и как вычислять объём текста.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Алфавит — конечный набор символов, которыми можно записывать сообщения. Это могут быть буквы, цифры, знаки препинания и пробел. Размер алфавита определяет, сколько разных обозначений требуется различать при кодировании.
Мощность алфавита — количество различных символов в нём; обычно её обозначают N. Для кода длиной i бит существует 2ⁱ разных комбинаций. Значит, чем больше алфавит, тем больше бит может понадобиться, чтобы присвоить отдельный код каждому его символу.
Двоичное кодирование текста — представление символов последовательностями нулей и единиц. Компьютер может хранить и обрабатывать такие последовательности, поэтому текст сначала переводят в двоичные коды. Для этого нужны общие правила: без них одна и та же последовательность могла бы означать разные знаки.
Кодовая таблица — соответствие между символами и их кодами. При записи по ней символ превращается в последовательность битов, а при чтении выполняется обратное действие. Таблица позволяет программам одинаково понимать, какой знак обозначает каждый код.
В памяти компьютера данные представлены двоичными сигналами, поэтому текстовые символы тоже необходимо выразить через нули и единицы. Каждому символу назначают код, а программа сохраняет эти коды как данные. При открытии файла другая программа должна знать правила преобразования кодов обратно в знаки.
Чтобы подобрать минимальную длину фиксированного кода для алфавита из N символов, ищут наименьшее целое i, при котором 2ⁱ ≥ N. Основание 2 появляется потому, что каждый бит имеет два значения: 0 или 1. Например, два бита дают четыре сочетания, а три — восемь, поэтому для восьми символов достаточно трёх бит.
Код текста получается, если последовательно соединить коды всех его символов. При одинаковой длине кодов объём можно найти умножением количества символов на длину одного кода. Поэтому два текста из равного числа символов займут одинаковое число бит лишь при одинаковой кодировке и одинаковой длине кода.
ASCII и Unicode решают задачу сопоставления символам кодов, но различаются охватом. Первоначальная таблица ASCII включает 128 символов: латинские буквы, цифры, знаки и управляющие коды; позднее использовались расширенные варианты, зависящие от системы. Unicode создан, чтобы описывать знаки множества языков, а способы его хранения, например UTF-8 и UTF-16, могут использовать разное число байтов.
При обмене текстом отправитель и получатель должны одинаково понимать сохранённые коды. Если файл записан по одним правилам, а открыт по другим, числовые значения будут истолкованы как неподходящие символы. Поэтому для передачи и чтения текста важно согласовать кодировки или использовать формат, который позволяет определить нужные правила.
| Характеристика | ASCII | Unicode |
|---|---|---|
| Какие символы охватывает | Латинские буквы, цифры, распространённые знаки и управляющие коды | Символы многих языков, письменностей и наборов знаков |
| Сколько символов можно представить | В исходной версии — 128; расширенные варианты зависят от конкретной таблицы | Более миллиона возможных кодовых позиций; число назначенных символов меньше и меняется |
| Как кодируются символы | Исходная таблица использует 7 бит; часто данные записывают в байте | Кодовые позиции хранят форматами UTF-8, UTF-16, UTF-32 и другими |
| Совместимость и применение | Подходит для базовых латинских текстов; расширения могут различаться | Широко применяется для текстов на разных языках; важен выбор подходящего формата хранения |
Сначала сравните охват символов: ASCII удобен для простого латинского текста, а Unicode нужен для многоязычного. Затем обратите внимание на способ хранения: Unicode — это не одна фиксированная длина кода, а стандарт с несколькими форматами кодирования. При разборе файла выясняйте не только набор символов, но и используемый формат.
Задача 1. Алфавит содержит 8 символов. Сколько бит достаточно для кодирования одного символа? Нужно найти наименьшую длину кода, при которой число двоичных комбинаций не меньше мощности алфавита.
Ответ: для одного символа достаточно 3 бит.
Задача 2. Текст содержит 120 символов, каждый кодируется фиксированным кодом длиной 8 бит. Найдём объём сообщения сначала в битах, затем в байтах. Поскольку код имеет одинаковую длину, достаточно умножить число символов на число бит в одном коде.
Ответ: 960 бит, или 120 байт.
Задача 3. Для алфавита из 50 символов нужно закодировать сообщение из 300 символов кодами одинаковой минимальной длины. Сначала найдём длину кода, а затем объём всего сообщения. При переводе в байты учитываем, что 1 байт равен 8 битам.
Ответ: код одного символа имеет длину 6 бит, сообщение занимает 1800 бит, или 225 байт.
Иногда считают, что число бит на символ равно мощности алфавита. Это смешение количества символов и длины кода: число бит выбирают по степеням двойки, чтобы комбинаций хватило на все знаки. Для проверки подставьте найденную длину i в условие 2ⁱ ≥ N и убедитесь, что для i − 1 условие ещё не выполняется.
Мощность алфавита путают с длиной кодовой последовательности. Первая величина показывает, сколько разных символов нужно кодировать, вторая — сколько бит отводится на один код. Проверьте единицы и смысл числа: N считают в символах, а длину кода — в битах.
При вычислении объёма забывают, что 1 байт равен 8 битам, или делят не в ту сторону. Переводя биты в байты, нужно разделить число бит на 8, а байты в биты — умножить на 8. Полезно выполнить обратную проверку: умножить полученное число байтов на 8.
Ещё одна ошибка — считать, что любой текст с одинаковым числом символов занимает одинаковое место. В разных кодировках символы могут иметь разную длину, а некоторые форматы Unicode используют переменное число байтов. Перед расчётом уточните кодировку и способ представления символов; вывод о равном объёме верен только при одинаковой длине кода.
Для вычислений в этой теме нужны знания о двоичной системе счисления, бите, байте и степенях числа 2. Эти понятия помогают понять, почему длина кода связана с количеством комбинаций. Кодирование текста пригодится при изучении файлов, передачи данных, языков программирования и хранения информации. Текстовый редактор позволяет создавать и изменять документ, а его кодировка определяет, как символы представлены в файле.
Почему компьютер хранит буквы в виде нулей и единиц?
Компьютерные устройства обрабатывают данные в двоичном виде: различают два состояния, которым условно соответствуют 0 и 1. Поэтому буквы и другие знаки сначала заменяют их двоичными кодами.
Как узнать, сколько бит нужно для кодирования символа?
Нужно найти наименьшее целое число i, для которого 2ⁱ не меньше количества символов в алфавите. Например, для 50 символов достаточно 6 бит, потому что 2⁶ = 64, а 2⁵ = 32.
Чем алфавит отличается от кодовой таблицы?
Алфавит — это набор символов, которыми можно записывать сообщения. Кодовая таблица задаёт соответствие между каждым таким символом и его кодом.
Чем ASCII отличается от Unicode?
ASCII первоначально описывает небольшой набор символов, в основном латинские буквы, цифры и знаки. Unicode предназначен для кодирования символов множества языков и систем письма; на практике его символы хранят разными способами, например UTF-8.
Почему текст иногда отображается нечитаемыми символами?
Обычно файл прочитан с неподходящей кодировкой: программа сопоставила сохранённые числовые коды не тем символам. Чтобы текст отображался правильно, при чтении нужно использовать кодировку, совместимую с той, в которой его записали.
1.1. Кодирование и обработка текстовой информации