"Информатика (базовый уровень)", Угринович Н.Д.
Компьютер хранит и обрабатывает текст не как набор букв, а как последовательность числовых кодов. Чтобы превратить символы в такие коды, используют кодовую таблицу: она связывает каждую букву, цифру или знак с определённой последовательностью битов. Размер алфавита влияет на длину кода, а выбранная кодировка — на то, как текст будет сохранён и прочитан. Поэтому для обмена данными важно, чтобы программы одинаково понимали коды.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Алфавит — конечный набор символов, которыми можно записать текст. Например, в алфавит могут входить буквы, цифры, пробел и знаки препинания. Чем больше символов в алфавите, тем больше разных кодов требуется. Поэтому размер алфавита влияет на число бит, необходимое для кодирования одного символа.
Кодирование текстовой информации — представление символов текста с помощью кодов, пригодных для хранения и обработки компьютером. Компьютер работает с данными в двоичном виде, поэтому буквам и знакам сопоставляют числовые представления. Такое преобразование позволяет хранить текст в памяти, передавать его по сети и обрабатывать программами. При этом сам смысл текста не меняется, меняется способ его записи.
Код символа — двоичная последовательность, которой сопоставляется определённый символ в выбранной системе кодирования. Например, кодом может быть последовательность из восьми битов, но длина зависит от способа кодирования. Код не является самой буквой: это её машинное представление. По коду программа определяет, какой знак нужно показать на экране.
Кодовая таблица — соответствие между символами и их кодами. Она нужна, чтобы отправитель мог заменить символы кодами, а получатель — восстановить исходный текст. Для правильного декодирования обе стороны должны использовать одну и ту же таблицу и правила кодировки. Иначе одинаковая последовательность битов может быть истолкована иначе.
Компьютеру необходимо представить текст числами, потому что его электронная память и процессор оперируют двоичными состояниями. Их удобно описывать нулём и единицей, то есть битами. Буквы сами по себе не являются для компьютера готовыми машинными данными, поэтому текст переводят в последовательность кодов. Когда программа выводит текст на экран, она выполняет обратное преобразование и показывает символы, соответствующие этим кодам.
Длина кодов зависит от того, сколько разных символов нужно различать. Из n бит можно составить 2ⁿ разных последовательностей, поскольку каждый бит имеет два значения. Если алфавит содержит N символов, при кодах одинаковой длины нужно выбрать такое n, чтобы 2ⁿ ≥ N. Например, пяти бит хватает для 32 символов, но четырёх бит — только для 16. Если выбрано слишком мало бит, некоторым символам не хватит уникальных кодов.
ASCII — пример кодовой таблицы, в которой символам соответствуют числовые коды. Исходная таблица включает латинские буквы, цифры, знаки и служебные символы, нужные для управления устройствами и обмена данными. Позднее появились расширенные варианты, рассчитанные на большее число знаков. Они не всегда совпадают между собой, поэтому один и тот же код в разных вариантах может означать разные символы.
Для национальных алфавитов создавали отдельные кодировки и кодовые страницы, потому что исходный набор символов не вмещал буквы всех языков. В ограниченное число доступных кодов добавляли нужные знаки, например кириллицу, но разные системы выделяли им разные значения. Если открыть текст с неподходящей кодировкой, программа применит чужую таблицу и покажет вместо букв случайные знаки. Это не обязательно означает, что файл повреждён: иногда достаточно выбрать правильную кодировку.
Unicode создавался как единый стандарт для символов множества письменностей. Он назначает символам номера, чтобы тексты на разных языках можно было согласованно описывать и обменивать. Однако номер символа и способ его записи в памяти — не одно и то же. Для хранения Unicode применяют разные способы кодирования, например UTF-8 и UTF-16, поэтому размер представления конкретного символа может отличаться.
| Характеристика | ASCII | Кириллические кодовые страницы | Unicode |
|---|---|---|---|
| Какие символы охватывает | Латинские буквы, цифры, знаки и служебные символы исходной таблицы | Кириллицу и другие символы, состав которых зависит от страницы | Символы многих письменностей и дополнительные знаки |
| Как задаются коды символов | Символам сопоставляются числовые коды исходной таблицы | Символы получают коды по правилам конкретной страницы | Символу назначается номер, который затем кодируется выбранным способом |
| Почему возможны разные варианты представления | Расширенные варианты добавляли разные символы | Страницы по-разному размещали буквы и знаки | Существуют разные способы записи номеров в памяти, например UTF-8 и UTF-16 |
| Совместимость при обмене текстом | Надёжна для общих символов при совпадении таблиц | Требует, чтобы обе стороны использовали одну страницу | Облегчает обмен, если стороны правильно определяют способ кодирования |
| Типичная причина появления нечитаемого текста | Использована несовместимая расширенная таблица | Текст прочитан с другой кириллической страницей | Неверно определён способ кодирования или нарушено преобразование |
Таблица помогает сравнить не только наборы символов, но и правила, по которым они представляются. При обмене текстом сначала проверьте, совпадают ли кодировка отправителя и способ чтения получателя. Если символы отображаются неверно, это может быть следствием несовпадения таблиц, а не утраты данных.
Нужно найти минимальное число бит для одного символа, если все коды имеют одинаковую длину. Проверим, сколько разных последовательностей дают несколько бит: для n бит это 2ⁿ кодов. Ищем наименьшее n, при котором кодов не меньше 32.
Ответ: минимальная длина кода — 5 бит на символ. Здесь предполагается, что каждому символу соответствует отдельный код одинаковой длины.
Пусть задана небольшая таблица: А — 00, Б — 01, В — 10, Г — 11. Закодируем слово «БАГ», а затем восстановим его из последовательности 00 10 01. Важно искать соответствие именно по таблице: число 01 здесь является кодом буквы Б, а не её порядковым номером.
Ответ: «БАГ» кодируется как 01 00 11, а последовательность 00 10 01 обозначает «АВБ». Разделение на группы по два бита возможно, поскольку в условии каждому символу назначен двухбитный код.
Пусть файл содержит 1200 символов, и по условию каждый из них занимает один байт. Требуется оценить объём только текстовых данных, не учитывая дополнительные сведения о формате файла. Сначала определяем размер представления одного символа, затем умножаем его на количество символов.
Ответ: 1200 байт, или примерно 1,17 Кбайт при принятом условии пересчёта. Это оценка: реальный размер зависит от кодировки, фактической длины кодов, пробелов и служебных данных формата файла.
Ошибка — считать, что один символ всегда занимает один байт. Так думают, потому что во многих простых примерах используется именно такое условие, но разные кодировки хранят символы по-разному. Проверяйте, что сказано в задаче или настройках файла: задан ли размер кода и можно ли применять его ко всем символам. Если этого не указано, точный объём по одному числу символов определить нельзя.
Нельзя путать число символов в алфавите с числом бит кода. Например, алфавиту из 32 символов нужны не 32 бита, а минимальная длина, позволяющая получить 32 разных последовательности. Ошибка возникает, когда число символов принимают за длину двоичной записи. Проверьте себя: возведите 2 в степень, равную предполагаемому числу бит, и убедитесь, что результат не меньше размера алфавита.
Одинаковые числовые коды не обязательно обозначают одинаковые символы во всех кодировках. Причина в том, что соответствие устанавливает конкретная таблица, а расширенные наборы и национальные страницы могут различаться. Не делайте вывод о символе только по числу: уточните название кодировки. При проверке сравните таблицу, которой закодировали текст, с таблицей, применённой при чтении.
Нечитаемый текст не всегда означает, что файл повреждён. Часто его открыли с неподходящей кодировкой, и программа прочитала последовательность байтов по другой таблице. Такая версия особенно вероятна, если файл открывается, но вместо букв появляются странные знаки. Проверьте кодировку в программе и попробуйте корректный вариант, не перезаписывая исходный файл до проверки.
Для понимания кодирования нужны знания о двоичной системе счисления, бите и байте: именно ими описывают машинные данные. Тема помогает оценивать объём текстовых файлов, если известны число символов и способ их хранения. Она также объясняет, почему текстовые редакторы, веб-страницы и устройства должны согласовывать кодировку. Эти сведения пригодятся при изучении хранения, передачи и обработки информации.
Почему компьютеру недостаточно просто хранить буквы?
Компьютер сохраняет и обрабатывает данные в двоичном виде — как последовательности нулей и единиц. Поэтому каждой букве и каждому знаку сопоставляют числовой код, который можно представить битами.
Как определить, сколько бит нужно для кодирования символа?
Нужно выбрать такое число бит n, чтобы 2ⁿ было не меньше размера алфавита N. Минимальное подходящее n и будет длиной кода при кодировании кодами одинаковой длины.
Почему один и тот же текст может выглядеть по-разному в разных программах?
Программы могут по-разному определять, какой символ обозначает числовой код, если используют разные кодировки. При неверном выборе таблицы байты текста превращаются в посторонние знаки или нечитаемые символы.
Чем кодовая таблица отличается от кодировки?
Кодовая таблица задаёт соответствие между символами и кодами. Кодировка — это способ представления текста, включающий правила такого соответствия и, в зависимости от стандарта, правила хранения кодов в байтах.
Значит ли Unicode, что каждый символ всегда занимает одинаковое число байтов?
Нет. Unicode задаёт символам единые номера, но для хранения этих номеров существуют разные способы кодирования, например UTF-8 и UTF-16. В них один символ может занимать разное число байтов.
1.1.1. Кодирование текстовой информации