"Информатика (базовый уровень)", Гейн А.Г., Гейн А.А.
Кодовая таблица связывает символы текста с числовыми кодами, которые компьютер хранит и обрабатывает как последовательности нулей и единиц. От выбранной кодировки зависит, какой код получит буква или знак и как этот код будет прочитан. ASCII содержит базовый набор латинских символов, национальные таблицы добавляют буквы конкретных языков, а Unicode объединяет письменности мира. Понимание этих различий помогает расшифровывать данные и объяснять появление нечитаемых символов.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Кодовая таблица — соответствие между символами текста и числовыми кодами, используемыми компьютером. Она позволяет заменить буквы и знаки числами, с которыми техника умеет работать. По такой таблице программа может выполнить обратное преобразование и показать сохранённый текст.
Код символа — число, однозначно обозначающее конкретный символ в выбранной кодировке. Например, в ASCII латинская «A» имеет код 65. Указание кодировки обязательно, потому что то же число в другой таблице может обозначать иной знак.
Кодировка — способ представления символов и правил их преобразования в двоичный вид. Она определяет, сколько байтов занимает код и как программа должна читать последовательность нулей и единиц. Это нужно, чтобы разные устройства одинаково сохраняли и передавали текст.
Unicode — международный стандарт кодирования символов разных языков и письменностей. Он стремится назначить отдельные кодовые позиции буквам, цифрам, знакам и специальным символам со всего мира. Благодаря этому один текст можно обрабатывать без набора отдельных таблиц для каждого языка.
Компьютер работает с электрическими состояниями, которые удобно представить нулями и единицами, а не с изображениями букв. Поэтому символ хранится как число, а число — как двоичная последовательность. Такой подход упрощает операции поиска, копирования, сравнения и передачи текста: машине не нужно распознавать внешний вид каждой буквы.
Кодовая таблица устанавливает пару «символ — код»: например, программе известно, какой знак нужно вывести для числа 65. При чтении байтов программа обращается к таблице и выполняет декодирование, то есть превращает числа обратно в символы. Одна и та же последовательность битов зависит от выбранной кодировки, поскольку разные таблицы по-разному распределяют коды между знаками.
ASCII создавалась для английского текста и содержит 128 позиций: управляющие символы, цифры, знаки препинания, арифметические знаки и латинские буквы в верхнем и нижнем регистрах. Для одного символа достаточно 7 бит, а в памяти часто используют один байт. Русских букв в исходном ASCII не было, поэтому появились расширенные кодировки, в которых свободные значения отводили национальным символам.
KOI8-R, Windows-1251 и другие однобайтные таблицы используют по одному байту на символ, поэтому имеют не более 256 возможных значений. Они отличаются тем, какие знаки помещены в расширенную часть диапазона и под какими номерами расположены русские буквы. Из-за этого файл, сохранённый в KOI8-R, нельзя надёжно читать как Windows-1251: одинаковые байты могут превратиться в разные символы.
Unicode решает проблему множества языков тем, что создаёт единую систему кодовых позиций для разных письменностей. Однако Unicode — это стандарт символов, а не единственный формат файла: UTF-8, UTF-16 и UTF-32 по-разному записывают эти позиции в памяти. UTF-8 особенно удобна для совместимости с ASCII и использует от одного до четырёх байтов в зависимости от символа.
| Параметр | ASCII | KOI8-R | Windows-1251 | Unicode |
|---|---|---|---|---|
| Назначение | Базовый международный набор | Русский текст и кириллица | Русский текст в среде Windows | Единое представление письменностей мира |
| Количество возможных кодов или диапазон кодов | 128: 0–127 | 256: 0–255 | 256: 0–255 | До 1 114 112 кодовых позиций: U+0000–U+10FFFF |
| Какие символы поддерживаются | Латиница, цифры, знаки, управляющие символы | Латиница, кириллица, цифры и знаки | Латиница, кириллица, цифры и знаки | Символы множества языков, знаки и эмодзи |
| Представление латинских букв | Основной набор | Совпадает с ASCII для базовых символов | Совпадает с ASCII для базовых символов | Сохраняет совместимость кодовых позиций с ASCII |
| Представление русских букв | Не поддерживаются | В расширенной части таблицы | В расширенной части таблицы | Имеют отдельные кодовые позиции Unicode |
| Совместимость с другими кодировками | Основа для многих кодировок | Не совпадает с Windows-1251 | Не совпадает с KOI8-R | Зависит от способа кодирования, например UTF-8 |
| Пример кодирования символа «А» | Символ не поддерживается | 193 | 192 | U+0410; в UTF-8 — D0 90 |
Таблицу следует читать построчно: сначала определить нужную систему, затем сравнить диапазон, набор символов и способ хранения. При расшифровке особенно важны последняя строка и совместимость, поскольку одинаковое число не гарантирует одинаковый знак. Для Unicode нужно дополнительно уточнять конкретный формат записи, например UTF-8.
По кодовой таблице ASCII требуется определить десятичный и двоичный код символа «A». Сначала находим именно заглавную латинскую букву, а не похожую русскую «А». Затем переводим найденное десятичное число в двоичную систему.
Ответ: десятичный код «A» равен 65, двоичный код — 01000001. Ведущий ноль не меняет значение числа, но показывает полную байтовую запись. Такой результат относится именно к ASCII.
Дана последовательность кодов 207, 160, 188, 160 в Windows-1251. Нужно получить слово, используя не любую знакомую таблицу, а указанную в условии. Смысл каждого числа определяем отдельно, потому что порядок кодов соответствует порядку символов в слове.
Ответ: получилось слово «Пама». Проверка выполняется обратным способом: код «П» должен быть 207, а код «а» — 160. Если применить вместо Windows-1251 таблицу ASCII, русские символы найти нельзя.
Один и тот же текст сохранён в KOI8-R, Windows-1251 и UTF-8. Нужно сравнить объём и объяснить искажение текста при неверном выборе кодировки. Рассмотрим текст из русских букв: в однобайтных таблицах каждый такой символ обычно занимает один байт, а в UTF-8 — два байта.
Ответ: для такого текста два однобайтных файла близки по объёму, а UTF-8 обычно больше. «Кракозябры» возникают, когда байты одной таблицы декодируют по правилам другой. Для точного сравнения учитывают также пробелы, латиницу, знаки и возможную служебную информацию.
Ошибка: считать, что каждому символу всегда соответствует один и тот же код. Её допускают, когда запоминают число без названия кодировки и переносят его на все таблицы. Проверка проста: вместе с кодом всегда указывайте систему и сверяйте символ в её таблице.
Ошибка: путать Unicode с конкретным способом хранения, например UTF-8. Причина в том, что в программах эти названия часто встречаются рядом. Проверьте себя вопросом: речь идёт о наборе кодовых позиций или о формате записи в байтах.
Ошибка: расшифровывать русские коды по ASCII. Так происходит, если выбирают первую знакомую таблицу, не читая условие. Сначала определите кодировку данных, а затем ищите каждый код именно в ней.
Ошибка: считать, что один символ всегда занимает один байт. Такое правило подходит не для всех систем и особенно опасно при работе с Unicode. Уточните конкретную кодировку: в UTF-8 размер представления символа может быть от одного до четырёх байтов.
До изучения кодовых таблиц нужно понимать двоичную систему счисления, байт и диапазон значений двоичного кода. Эти знания объясняют, почему один байт даёт 256 вариантов и как число записывается нулями и единицами. Они также связывают код символа с общим представлением информации в компьютере.
Тема пригодится при изучении текстовых файлов, кодирования и передачи данных. Она объясняет, почему размер файла зависит от выбранного формата и почему при обмене текстом появляются «кракозябры». Те же принципы используются при настройке программ и анализе сетевых сообщений.
Почему один и тот же текст в разных кодировках имеет разные коды?
Разные кодировки используют собственные таблицы соответствий между символами и числами. Поэтому одна и та же буква, например русская «А», может иметь разные числовые коды. При чтении нужно применять ту же кодировку, в которой текст был сохранён.
Чем кодовая таблица отличается от кодировки?
Кодовая таблица показывает соответствие символов и кодов. Кодировка — более широкое понятие: она включает таблицу и правила представления кодов в байтах или битах. Например, UTF-8 задаёт способ хранения символов Unicode.
Почему ASCII недостаточно для русского языка?
ASCII содержит ограниченный набор из 128 кодов: латинские буквы, цифры, знаки препинания и управляющие символы. Русских букв в этой таблице нет, поэтому для них создавались расширенные и национальные кодировки.
Unicode и UTF-8 — это одно и то же?
Нет. Unicode — международный стандарт, который назначает символам кодовые позиции, а UTF-8 — один из способов записывать эти символы в байтах. Один и тот же символ Unicode можно представить также с помощью UTF-16 или UTF-32.
Почему при открытии текстового файла появляются «кракозябры»?
Программа использует не ту кодировку, в которой файл был сохранён. Одинаковые байты тогда сопоставляются с другими символами, и вместо исходного текста появляются бессмысленные знаки. Нужно выбрать правильную кодировку или сохранить файл заново в совместимом формате.
§ 13. Кодовые таблицы