- Кодирование превращает сообщение в последовательность знаков по заранее известным правилам.
- Компьютер хранит всё числами: текст — номерами символов, цвет — тремя числами, звук — рядом измерений.
- Современный стандарт текста — Юникод с кодировкой UTF-8, где символ занимает от 1 до 4 байт.
- Кодирование, сжатие и шифрование — разные вещи, хотя все они что-то преобразуют.
Содержание10 разделов ▾
Кодирование информации — преобразование сообщения в последовательность знаков по заранее известным правилам. В компьютере для этого используют двоичный код: нули и единицы. Статья для тех, кто уже знает, что такое биты и байты, и хочет понять, как в них превращаются текст, цвет и звук. Вы узнаете, как работают ASCII и UTF-8, как записывают цвет пикселя и как звуковая волна становится рядом чисел, а затем запустите короткую программу на Python, где все три превращения видны сразу.
Определения и стандарты мы сверяли с Википедией, документами RFC, сайтами Unicode Consortium, W3C и ITU. Код проверен запуском на Python 3.13. Данные на октябрь 2026 года. Статья объясняет принцип, а не устройство конкретных файловых форматов.
Что такое кодирование
Википедия определяет кодирование информации как процесс преобразования сигнала из формы, удобной для непосредственного использования, в форму, удобную для передачи, хранения или автоматической переработки. Простой пример — азбука Морзе: буквы превращаются в точки и тире.
Почему компьютеру нужны нули и единицы
Двоичный код, по определению Википедии, — это способ представления данных, в котором каждый разряд принимает одно из двух значений, обычно 0 и 1. Двух состояний достаточно, чтобы записать любые числа. Как из нулей и единиц строятся числа, разобрано в статье о двоичной системе, а в каких единицах измеряют объём — в статье о единицах информации.
Любые данные в компьютере сводятся к числам: текст — к номерам символов, изображение — к числам цвета, звук — к числам измерений. Дальше числа записываются в двоичном виде.
Как кодируется текст
Чтобы записать текст, каждому символу присваивают номер. Первый широко распространённый набор — ASCII. По RFC 20 это 7-битный код, который передают в 8-битном байте, у которого старший бит всегда равен нулю. Википедия уточняет, что в ASCII 128 символов: латинские буквы, цифры, некоторые знаки и управляющие символы. Русских букв там нет.
Для других языков понадобились другие таблицы, и из-за их многообразия возникала путаница. Стандарт Юникод решает задачу целиком: по описанию Википедии, он включает знаки почти всех письменных языков мира и присваивает каждому символу код — неотрицательное целое число, которое записывают в шестнадцатеричной форме с префиксом U+, например U+040F. Способ записи этих номеров в байтах задаёт отдельная кодировка. Самая распространённая — UTF-8.
UTF-8 описана в RFC 3629. Символ занимает от одного до четырёх байт, в зависимости от номера:
| Номер символа | Байтов | Шаблон битов |
|---|---|---|
| U+0000–U+007F | 1 | 0xxxxxxx |
| U+0080–U+07FF | 2 | 110xxxxx 10xxxxxx |
| U+0800–U+FFFF | 3 | 1110xxxx 10xxxxxx 10xxxxxx |
| U+10000–U+10FFFF | 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
Три примера из программы ниже: латинская «A» — номер U+0041, один байт; кириллическая «я» — U+044F, два байта; знак евро «€» — U+20AC, три байта.
Как кодируется изображение
Растровое изображение, по Википедии, — это сетка из пикселей, цветных точек. Размер задают в пикселях по ширине и высоте: изображение 1600 × 1200 содержит 1 920 000 точек.
Цвет каждого пикселя записывают тремя числами: красным, зелёным и синим. Спецификация W3C CSS Color объясняет запись #RRGGBB: первая пара шестнадцатеричных цифр задаёт красный, вторая зелёный, третья синий, каждая от 00 до ff (255 в десятичной системе). Например, #00ff00 — ярко-зелёный. Каждое из трёх чисел занимает один байт, поэтому пиксель занимает три байта.
Цвет — это три числа, а картинка — таблица таких троек. Если не сжимать данные, снимок 1600 × 1200 потребует 5 760 000 байт. Поэтому в форматах вроде PNG данные сжимаются: PNG, по спецификации W3C, хранит растровые изображения без потерь и с хорошим сжатием.
Векторная графика устроена иначе: она хранит не точки, а описания линий и фигур, и поэтому увеличивается без потери качества.
Как кодируется звук
Звук — непрерывная волна, а компьютеру нужны числа. Для этого звук оцифровывают в два приёма.
- Дискретизация. По Википедии, это представление непрерывного сигнала набором его значений, выборок, взятых через равные промежутки времени. Чем чаще измерения, тем точнее запись.
- Квантование. Диапазон значений делят на конечное число уровней, и каждое измерение округляют до ближайшего уровня. Чем больше уровней, тем точнее запись.
Результат записывают двоичным кодом. Такой способ называют импульсно-кодовой модуляцией (ИКМ, PCM): Википедия отмечает, что она используется для оцифровки аналоговых сигналов, в том числе аудио, а в рекомендации ITU-T G.711 она описана для речевых частот.
Кодирование, сжатие и шифрование
Три слова часто путают. У них разные задачи.
| Что | Что делает | Зачем | Можно ли восстановить |
|---|---|---|---|
| Кодирование | меняет форму записи по известным правилам | хранить, передавать, обрабатывать | да, по таблице кодов |
| Сжатие | уменьшает объём данных, убирая избыточность | экономить место и трафик | как правило, да |
| Шифрование | скрывает содержимое от неавторизованных лиц, нужен ключ | защитить от посторонних | да, но только с ключом |
Википедия описывает сжатие как алгоритмическое, обычно обратимое преобразование ради уменьшения объёма, а шифрование как обратимое преобразование информации с целью сокрытия от неавторизованных лиц. Кодированием можно пользоваться вместе с обоими.
Сквозной пример на Python
Программа показывает все три превращения. Она использует только стандартную библиотеку.
import math
# 1. Текст -> номера символов -> байты UTF-8 -> двоичная запись
for символ in "Aя€":
байты = символ.encode("utf-8")
двоично = " ".join(f"{b:08b}" for b in байты)
print(f"{символ!r}: номер U+{ord(символ):04X}, байтов {len(байты)}, {двоично}")
# 2. Цвет -> три числа (красный, зелёный, синий) -> запись #RRGGBB
красный, зелёный, синий = 128, 200, 255
print("цвет:", (красный, зелёный, синий), "->", f"#{красный:02X}{зелёный:02X}{синий:02X}")
print("красный в двоичном виде:", f"{красный:08b}")
пикселей = 1600 * 1200
print("изображение 1600×1200:", пикселей, "пикселей,", пикселей * 3, "байт без сжатия")
# 3. Звук -> отсчёты амплитуды -> уровни 4-битного кода (16 уровней)
отсчётов = 8
for k in range(отсчётов):
амплитуда = math.sin(2 * math.pi * k / отсчётов) # от -1 до 1
уровень = round((амплитуда + 1) / 2 * 15) # от 0 до 15
print(f"отсчёт {k}: амплитуда {амплитуда:+.2f} -> уровень {уровень:2d} -> {уровень:04b}")Вывод при запуске на Python 3.13:
'A': номер U+0041, байтов 1, 01000001
'я': номер U+044F, байтов 2, 11010001 10001111
'€': номер U+20AC, байтов 3, 11100010 10000010 10101100
цвет: (128, 200, 255) -> #80C8FF
красный в двоичном виде: 10000000
изображение 1600×1200: 1920000 пикселей, 5760000 байт без сжатия
отсчёт 0: амплитуда +0.00 -> уровень 8 -> 1000
отсчёт 1: амплитуда +0.71 -> уровень 13 -> 1101
отсчёт 2: амплитуда +1.00 -> уровень 15 -> 1111
отсчёт 3: амплитуда +0.71 -> уровень 13 -> 1101
отсчёт 4: амплитуда +0.00 -> уровень 8 -> 1000
отсчёт 5: амплитуда -0.71 -> уровень 2 -> 0010
отсчёт 6: амплитуда -1.00 -> уровень 0 -> 0000
отсчёт 7: амплитуда -0.71 -> уровень 2 -> 0010Байты символов совпадают с шаблонами из таблицы RFC 3629. Звуковая волна из восьми измерений превратилась в восемь четырёхбитных чисел. Это учебная модель: реальные записи делают много измерений в секунду и используют больше уровней.
Условия и ограничения
- Версия
- Python 3.13, октябрь 2026 — код проверен запуском; стандарты и документация сверены на 8 октября 2026.
- Стандарты
- ASCII, Юникод и UTF-8 — разное — Юникод задаёт номера символов, UTF-8 — способ записать их в байтах, ASCII — старый набор из 128 символов.
- Примеры
- Упрощены — реальные форматы изображений и звука устроены сложнее: используют сжатие, метаданные и другие модели цвета.
- Размеры
- Зависят от формата — объём файла определяют формат и сжатие, а не только число пикселей или измерений.
- Кодировки
- Нужно знать, какая используется — файл, открытый в неподходящей кодировке, показывает «кракозябры»; разбор этого — в отдельной статье.
Частые ошибки
- Путают кодирование, сжатие и шифрование: у них разные цели.
- Считают, что один символ всегда равен одному байту. В UTF-8 это от одного до четырёх байт.
- Смешивают Юникод и UTF-8: первый присваивает номера, второй записывает их в байты.
- Забывают, что цвет — это три числа, а не одно, и пиксель занимает три байта без сжатия.
- Думают, что звук в компьютере хранится как «волна»: на самом деле это ряд измерений.
- Открывают файл в неверной кодировке и принимают «кракозябры» за порчу файла.
Короткий вывод
Кодирование превращает сообщение в числа по известным правилам, а двоичный код записывает эти числа нулями и единицами. Текст кодируют номерами символов и UTF-8, цвет — тремя числами, звук — рядом измерений. Сжатие и шифрование — самостоятельные операции поверх кодирования.




