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

Представление текстовой информации в компьютере

"Информатика (базовый уровень) (в 2 частях)", Под ред. Макаровой Н.В.

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

Кратко о теме

Компьютер хранит текст не как привычные буквы, а как числовые коды, записанные в двоичном виде. Соответствие между символами и числами задаёт кодовая таблица, а правила такого представления называют кодировкой. Разные кодировки могут по-разному обозначать один символ, поэтому текст иногда отображается неправильно. Для поддержки символов разных языков создан Unicode; один из способов хранения кодов Unicode — UTF-8. Понимание этих правил помогает оценивать размер текстовых файлов и правильно открывать их.

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

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

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

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

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

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

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

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

Компьютер не распознаёт буквы так, как их видит человек: память и процессор работают с данными, представленными числами. Состояния элементов памяти принято обозначать нулём и единицей, поэтому число записывают в двоичной системе. Для текста это означает, что каждой букве или знаку сначала назначают числовой код. Затем этот код сохраняется в виде битов — нулей и единиц.

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

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

KOI8-R и Windows-1251 — однобайтные кодировки, в которых предусмотрены русские буквы, но соответствия кодов символам у них различаются. Байт — это группа из восьми битов; в однобайтной кодировке он может задавать один символ из доступного набора. Если прочитать файл Windows-1251 как KOI8-R, программа применит к байтам чужую таблицу, и вместо ожидаемых букв появятся другие знаки. Так происходит не потому, что байты обязательно испорчены, а потому, что их истолковали по другим правилам.

Unicode решает задачу представления символов разных языков в общей системе кодов. Однако стандарт символов и способ записи кодов в файл — не одно и то же: Unicode можно хранить разными способами. Например, UTF-8 кодирует Unicode-последовательности переменным числом байтов: распространённые латинские символы обычно занимают один байт, а многие другие символы — больше. Поэтому UTF-8 сохраняет совместимость с ASCII для базовых латинских знаков, одновременно позволяя представлять широкий набор символов.

Сравнение кодировок текстовой информации

ХарактеристикаASCIIKOI8-RWindows-1251Unicode (UTF-8)
Назначение и область примененияАнглийский текст и базовые знакиРусский текст, главным образом в прежних системахРусский текст в программах и системах WindowsТексты на разных языках и обмен данными
Количество и состав кодируемых символов128 символов в исходном ASCII256 позиций однобайтной кодировки256 позиций однобайтной кодировкиШирокий набор Unicode; UTF-8 использует от 1 до 4 байтов на символ
Поддержка русского языкаНетЕстьЕстьЕсть
Способ хранения кодаОдин байт на символОдин байт на символОдин байт на символПеременное число байтов в UTF-8
Совместимость с другими кодировкамиБазовые знаки совпадают с началом UTF-8Не совпадает с Windows-1251 для ряда кодовНе совпадает с KOI8-R для ряда кодовУдобна для обмена, но файл должен читаться как UTF-8
Современное применениеВ основном как основа для совместимостиПреимущественно в старых материалахВ основном для поддержки старых файлов и системРаспространённый формат текстов и веб-страниц

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

Разбор задач

Задача 1. По заданной таблице определить числовой и двоичный код символа «A». В таблице указано, что символу «A» соответствует число 65; двоичную запись нужно представить в восьми разрядах. Сначала ищем букву, потому что её код зависит от таблицы, и лишь после этого переводим число в двоичную систему. Решение по шагам:

  1. Находим строку символа «A» в таблице: числовой код равен 65.
  2. Представляем 65 как сумму степеней двойки: 64 + 1.
  3. Записываем единицы в разрядах 64 и 1, а в остальных разрядах ставим нули: 01000001.
  4. Проверяем результат: 01000001₂ = 65₁₀.

Ответ: числовой код — 65, двоичный код — 01000001. Для русской буквы действия те же, но сначала надо взять её числовой код из конкретной таблицы: он может отличаться в разных кодировках. Поэтому нельзя переводить в двоичную систему код, не проверив, к какой таблице он относится.

Задача 2. Найти объём строки «Привет» в однобайтной кодировке и UTF-8. Строка содержит шесть русских букв, пробелов и знаков препинания в ней нет. В однобайтной кодировке каждая из этих букв занимает один байт, а в UTF-8 русская буква обычно занимает два байта. Решение по шагам:

  1. Считаем символы: в слове шесть букв.
  2. Для однобайтной кодировки вычисляем 6 × 1 = 6 байт.
  3. Для UTF-8 учитываем два байта на каждую русскую букву: 6 × 2 = 12 байт.
  4. Сравниваем результаты и убеждаемся, что способ хранения изменил объём строки.

Ответ: 6 байт в однобайтной кодировке и 12 байт в UTF-8, если считать только данные символов. Для другого текста нужно проверять состав символов: пробелы, латинские буквы и знаки могут иметь иной размер в UTF-8. Служебные данные файла в этот простой расчёт не включены.

Задача 3. Файл сохранён в Windows-1251, но после открытия текст отображается набором непонятных знаков. Нужно объяснить причину и выбрать способ исправления. Буквы в файле записаны байтами, а программа при чтении должна определить, каким символам эти байты соответствуют. Решение по шагам:

  1. Проверяем, в какой кодировке файл был сохранён: по условию это Windows-1251.
  2. Проверяем выбранную программой кодировку; если это UTF-8 или KOI8-R, таблица соответствий будет другой.
  3. Выбираем Windows-1251 при открытии или преобразуем файл в UTF-8, используя исходную кодировку как источник.
  4. Снова открываем файл и проверяем, что русские буквы отображаются правильно.

Ответ: вероятная причина — несоответствие кодировки файла и выбранной кодировки чтения. Для просмотра следует указать Windows-1251, а для преобразования — сначала корректно прочитать исходный файл и только потом сохранить в целевом формате. Простая смена обозначения кодировки без преобразования байтов может не исправить текст.

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

Считать, что один символ всегда занимает один байт. Это верно не для всех способов хранения: в UTF-8 число байтов зависит от символа. Ошибку легко допустить, если помнить только об однобайтных кодировках. Проверяйте тип кодировки и состав строки, прежде чем рассчитывать объём.

Путать числовой код с его двоичной записью. Код — это назначенное символу число, а нули и единицы показывают, как число записано в памяти. Путаница возникает потому, что оба представления относят к одному символу. Для самопроверки подпишите отдельно числовой код и его перевод в двоичную систему.

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

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

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

Для понимания темы пригодятся двоичная система счисления, единицы измерения информации и представление данных в памяти: они объясняют, откуда берутся коды и байты. Эти знания применяются при работе с текстовыми файлами, HTML-документами и базами данных, а также при передаче данных по сети. В программировании выбор кодировки влияет на ввод и вывод строк и правильное отображение национальных символов. Если кодировки отправителя и получателя не согласованы, текст может исказиться при обмене.

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

  • Компьютер хранит текст не в виде букв, а в виде числовых кодов символов.
  • Числовые коды символов хранятся в памяти в двоичном виде.
  • Кодовая таблица задаёт соответствие между символами и их кодами.
  • ASCII не содержит полного набора символов русского языка.
  • Разные кодировки могут назначать разные символы одному и тому же числовому коду.
  • Unicode предназначен для единого представления символов большинства языков.
  • Объём текста в памяти зависит от выбранной кодировки и способа хранения символов.

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

Почему компьютер не может хранить текст непосредственно в виде букв?

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

Чем кодировка отличается от кодовой таблицы?

Кодовая таблица показывает соответствие символов и числовых кодов. Кодировка включает правила такого соответствия и то, как коды представляются и хранятся в памяти. Эти понятия связаны, но не тождественны.

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

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

Всегда ли один символ занимает один байт?

Нет. В однобайтной кодировке символ обычно занимает один байт, но набор доступных символов ограничен. В UTF-8 символы могут занимать от одного до четырёх байтов, поэтому размер зависит от конкретного текста.

Зачем нужен Unicode, если существуют национальные кодировки?

Национальные кодировки рассчитаны на ограниченный набор символов, и их соответствия могут различаться. Unicode задаёт общий стандарт для символов разных языков и письменностей. Это упрощает обмен текстом между программами и странами, хотя способ хранения Unicode тоже нужно учитывать.

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

Представление текстовой информации в компьютере

Учебник

Оглавление →
Предмет
Информатика
Класс
10 класс, 11 класс
Учебник
"Информатика (базовый уровень) (в 2 частях)", Под ред. Макаровой Н.В.