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

§ 13. Кодовые таблицы

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

Объяснение темы В оглавлении: § 13. Кодовые таблицы

Кратко о теме

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

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

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

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

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

Код символа — число, которое таблица ставит в соответствие конкретному символу. Например, код A в ASCII равен 65 в десятичной системе; двоичная запись этого числа — 1000001, то есть способ записать код, а не другой код.

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

Unicode — стандарт, предназначенный для кодирования символов разных языков и письменностей. Он задаёт символам кодовые позиции, но не определяет сам по себе, сколько байтов займёт текст в файле: это зависит от выбранного способа кодирования.

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

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

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

ASCII содержит ограниченный набор символов, поэтому для кириллицы и других письменностей появились расширенные кодировки. В однобайтовой таблице каждому символу отводится одно из 256 возможных значений, но разные таблицы могли распределять верхние значения по-разному. Это позволяло уместить нужные буквы в байтах, но создавало несовместимость: один файл нельзя было без проверки правильно прочитать в любой системе. Unicode расширил набор кодовых позиций, чтобы охватить символы множества языков.

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

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

Сравнение кодовых таблиц и кодировок

ХарактеристикаASCIIОднобайтовая кодировка кириллицыUnicode
Какие символы охватываетЛатиницу, цифры, знаки препинания и управляющие символыЛатиницу и набор символов, в который обычно входят буквы кириллицыСимволы множества языков и письменностей
Размер кодового пространства или способ представления128 кодов, обычно записываемых одним байтом256 кодовых значений в одном байтеКодовые позиции Unicode; байтовый размер зависит от формата, например UTF-8 или UTF-16
Как представлены символы кириллицыНе представлены в базовом набореВ отдельных позициях конкретной таблицыСобственными кодовыми позициями
Совместимость с другими кодировкамиРаспространён для базовых латинских символов; расширения могут различатьсяЗависит от конкретной таблицы и её совпадения с другой кодировкойОбщие кодовые позиции, но байтовое представление зависит от формата
Что происходит при неверном выборе кодировкиСимволы вне ASCII могут не отобразиться правильноЧасть текста превращается в чужие знаки или нечитаемые символыПри неверном декодировании байтов текст отображается неправильно

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

Разбор задач

Задача 1. Код символа A

Условие. По таблице ASCII найдите числовой и двоичный код символа A. Предположим, в таблице указано десятичное значение 65. Нужно не перепутать числовой код с его записью в другой системе счисления.

  1. Находим строку или ячейку символа A и считываем код: 65.
  2. Уточняем основание: таблица даёт десятичное число, значит, его нужно перевести в двоичную систему.
  3. Разлагаем 65 на степени двойки: 65 = 64 + 1, поэтому в разрядах 2⁶ и 2⁰ стоят единицы.

Ответ. Числовой код A в ASCII — 65₁₀, его двоичная запись — 1000001₂. Если записывать значение в восьмиразрядном байте, слева добавляют ноль: 01000001. Нули в начале не меняют значение числа.

Задача 2. Восстановление текста по кодам

Условие. В заданной таблице Unicode дана последовательность кодов: 1055, 1088, 1080, 1074, 1077, 1090. Восстановите текст. Здесь числа трактуются как десятичные кодовые позиции Unicode, а не как байты в файле.

  1. Для каждого числа отдельно находим символ с такой кодовой позицией: 1055 — П, 1088 — р, 1080 — и.
  2. Продолжаем сопоставление: 1074 — в, 1077 — е, 1090 — т.
  3. Записываем найденные символы в исходном порядке, не сортируя коды и не меняя их местами.

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

Задача 3. Нечитаемый русский текст

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

  1. Проверяем, не использованы ли при сохранении и чтении разные кодировки, например две несовместимые однобайтовые таблицы.
  2. Если кодировки не совпадают, выбираем для открытия ту, в которой исходно записали файл; для этого можно проверить известные настройки программы или подобрать подходящий вариант.
  3. Если правильный текст удалось прочитать, сохраняем его в современной согласованной кодировке, например UTF-8, чтобы уменьшить риск повторной ошибки.

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

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

Считать, что номер символа в таблице всегда уже записан в двоичном виде, — ошибка: число может быть указано в десятичной или другой системе. Так думают, потому что компьютеры используют двоичный код, хотя таблицы часто печатают с десятичными значениями. Проверьте заголовок столбца или условие и подпишите основание числа. Например, 65₁₀ и 1000001₂ — одно значение, но разные записи.

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

Нельзя смешивать кодовую позицию Unicode с количеством байтов в файле. Эта путаница возникает из-за того, что оба понятия описывают представление символа, но байты зависят от выбранного формата кодирования. Проверяйте, говорится ли в задаче о номере символа или о размере данных, и уточняйте формат, например UTF-8. Число символов не всегда равно числу байтов.

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

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

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

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

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

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

Зачем компьютеру нужна кодовая таблица?

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

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

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

Есть ли в ASCII русские буквы?

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

Чем код символа отличается от его двоичной записи?

Код символа — числовое значение, назначенное ему таблицей, например 65 для A в ASCII. Двоичная запись — способ представить это число, например 65₁₀ = 1000001₂.

Означает ли Unicode, что каждый символ занимает одинаковое число байтов?

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

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

§ 13. Кодовые таблицы

Эта же тема в других учебниках

Учебник

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