Кодирование информации: принципы и стандарты¶
Кодирование информации — это процесс преобразования данных в форму, пригодную для передачи, хранения или обработки с помощью заданного набора символов или сигналов. В информатике под кодированием чаще понимают сопоставление символов (букв, цифр, знаков) числовым кодам, а в телекоммуникациях — преобразование сигнала в форму, устойчивую к искажениям канала связи.
¶Основные понятия
Кодирование опирается на три ключевых элемента:
- Алфавит — конечный набор допустимых символов (например, латиница, кириллица, набор служебных знаков).
- Кодовая таблица — правило соответствия «символ → код».
- Код — последовательность битов (в цифровых системах) или сигналов (в аналоговых), представляющая символ.
Чтобы декодер однозначно восстановлял исходные данные, кодирование должно быть однозначным (каждому символу — свой код) и по возможности непрерывным (коды не содержат вложенных друг в друга префиксов, чтобы поток символов можно было разбирать без разделителей).
¶Текстовые кодировки
¶ASCII
Первой широко применяемой кодировкой стала ASCII (American Standard Code for Information Interchange), принятая в 1963 году. Она использует 7 бит на символ, что даёт 128 комбинаций: латинские буквы, цифры, основные знаки пунктуации и управляющие символы (перевод строки, возврат каретки). Кириллица в ASCII не представлена, поэтому для русского языка потребовались расширения.
¶Кодировки с поддержкой кириллицы
В СССР и России последовательно использовалось несколько стандартов:
| Кодировка | Годы | Бит на символ | Особенности |
|---|---|---|---|
| ГОСТ 19768-74 | с 1974 | 8 | Стандартный набор для ЭВМ «Электроника», Ё/ё отсутствовали в исходной версии |
| KOI-8 | с 1983 | 8 | Разработана в СССР; русские буквы кодируются так, что при 7-битном режиме получается транслит |
| Windows-1251 | с 1995 | 8 | Кодировка Microsoft для кириллицы; Ё присутствует |
| ISO 8859-5 | с 1988 | 8 | Международный стандарт с кириллицей |
Принцип KOI-8 заслуживает отдельного пояснения: в нём старшие биты русских букв совпадают с латинскими эквивалентами («а» → «a», «б» → «b»), поэтому при потере старшего бита текст остаётся читаемым транслитерацией.
¶Unicode
Проблема множества несовместимых кодировок привела к созданию Unicode — проекта, начатого в 1988 году и реализованного в 1991 году. Unicode задаёт единый пространство кодов для всех письменностей мира: более 149 000 символов из 159 письменных систем, включая кириллицу, иероглифы, эмодзи.
Ключевое различие — между кодовой точкой (числом, например U+0416 для «Ж») и кодировкой (способом записи этих чисел в байты):
- UTF-8 — переменная длина, от 1 до 4 байт; совместима с ASCII; наиболее распространена в файлах и сети.
- UTF-16 — переменная длина, 2 или 4 байта; используется в Windows API и Java.
- UTF-32 — фиксированные 4 байта на символ; редка из-за неэкономичности.
В UTF-8 кириллические буквы занимают 2 байта, латинские — 1 байт, что делает формат компромиссным для смешанных текстов.
¶Кодирование данных для хранения и передачи
¶Кодирование Хаффмана
Алгоритм Хаффмана (1952) строит префиксный код: символам с большей частотой присваиваются более короткие коды. Для текста на русском языке буквы «е», «о», «а» получают коды длиной 2–3 бита, а редкие «ф», «ъ» — 8–10 бит. Сжатие достигается за счёт разной длины кодов и отсутствия разделителей.
¶Код Рида — Соломона
В системах с гарантированной доставкой (CD, DVD, QR-коды, цифровое телевидение, связи NASA) применяется код Рида — Соломона (1960). Он добавляет к данным избыточные символы, позволяющие восстановить утраченные фрагменты без повторной передачи. Именно этот код обеспечивает читаемость поцарапанного диска или QR-кода с повреждённым углом.
¶Кодирование линий (линейное кодирование)
В телекоммуникациях под кодированием понимают преобразование цифрового потока в сигнал канала:
- NRZ — без возврата к нулю: «1» — высокий уровень, «0» — низкий; просто, но возможна потеря синхронизации на длинных последовательностях одинаковых бит.
- Манчестерское кодирование — каждый бит содержит переход; синхронизация гарантирована, но ширина полосы удваивается. Применяется в Ethernet.
- Кодирование 4B/5B — группа 4 бит заменяется 5-битовым кодом с гарантией переходов; используется в Fast Ethernet и FDDI.
¶Кодирование в других областях
Квантование — дискретизация непрерывного сигнала по амплитуде; основа цифрового звука (PCM, 16 бит для CD) и видео.
Сжатие с потерями (JPEG, MP3) — отбрасывание информации, малозаметной для восприятия, что даёт многократное уменьшение объёма.
QR-код — двумерный штрихкод, разработанный в 1994 году японской компанией Denso Wave; содержит до 7089 цифр или 4296 букв в кодировке UTF-8 и включает коды коррекции ошибок Рида — Соломона.
¶Принцип двоичного кодирования
В основе цифровых систем лежит двоичный код: два устойчивых состояния (0 и 1) позволяют представить любое число, символ или команду. Преимущество двоичного представления — устойчивость к помехам: достаточно отличить два уровня, а не восстанавливать точное значение. Отсюда следует и принцип кодирования информации в компьютере: текст, изображение, звук и программа — всё сводится к потокам битов, различающихся только интерпретацией.
¶Историческая справка
Системы кодирования предшествуют электронике: телеграфный код Морзе (1838) сопоставлял буквы последовательностям точек и тире разной длины, а пятибитовый телетайпный код Бодо (1870-е) стал прообразом байтового кодирования. Переход к 8-битному байту произошёл в 1960-е годы вместе с развитием компьютеров IBM и DEC.
¶Источники
- Р. С. Рутковский. Кодирование и сжатие информации
- К. Хенни, К. Найман. Кодирование и сжатие данных
- Unicode Standard, Version 15.0
- ГОСТ 19768-74. Наборы кодов для обработки русского языка
- К. Шеннон. Работа по теории информации
