Кодирование информации: текст, картинки и звук в виде 0 и 1

Кодирование информации: текст, картинки и звук в виде 0 и 1

Данные на октябрь 2026, Python 3.13Опубликовано 28 апреля 2025Обновлено 7 июля 20268 мин чтения
Машина с воронкой, кард-ридером и лотком перфокарт
Коротко
  • Кодирование превращает сообщение в последовательность знаков по заранее известным правилам.
  • Компьютер хранит всё числами: текст — номерами символов, цвет — тремя числами, звук — рядом измерений.
  • Современный стандарт текста — Юникод с кодировкой UTF-8, где символ занимает от 1 до 4 байт.
  • Кодирование, сжатие и шифрование — разные вещи, хотя все они что-то преобразуют.
Содержание10 разделов ▾
  1. Что такое кодирование
  2. Почему компьютеру нужны нули и единицы
  3. Как кодируется текст
  4. Как кодируется изображение
  5. Как кодируется звук
  6. Кодирование, сжатие и шифрование
  7. Сквозной пример на Python
  8. Условия и ограничения
  9. Частые ошибки
  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+007F10xxxxxxx
U+0080–U+07FF2110xxxxx 10xxxxxx
U+0800–U+FFFF31110xxxx 10xxxxxx 10xxxxxx
U+10000–U+10FFFF411110xxx 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, хранит растровые изображения без потерь и с хорошим сжатием.

Векторная графика устроена иначе: она хранит не точки, а описания линий и фигур, и поэтому увеличивается без потери качества.

Как кодируется звук

Звук — непрерывная волна, а компьютеру нужны числа. Для этого звук оцифровывают в два приёма.

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

Результат записывают двоичным кодом. Такой способ называют импульсно-кодовой модуляцией (ИКМ, PCM): Википедия отмечает, что она используется для оцифровки аналоговых сигналов, в том числе аудио, а в рекомендации ITU-T G.711 она описана для речевых частот.

Кодирование, сжатие и шифрование

Три слова часто путают. У них разные задачи.

ЧтоЧто делаетЗачемМожно ли восстановить
Кодированиеменяет форму записи по известным правиламхранить, передавать, обрабатыватьда, по таблице кодов
Сжатиеуменьшает объём данных, убирая избыточностьэкономить место и трафиккак правило, да
Шифрованиескрывает содержимое от неавторизованных лиц, нужен ключзащитить от постороннихда, но только с ключом

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

Сквозной пример на Python

Программа показывает все три превращения. Она использует только стандартную библиотеку.

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, цвет — тремя числами, звук — рядом измерений. Сжатие и шифрование — самостоятельные операции поверх кодирования.

Источники

  1. Википедия: Кодирование (страница значений)↗ ru.wikipedia.org
  2. Википедия: Двоичный код↗ ru.wikipedia.org
  3. RFC 20: ASCII format for network interchange↗ rfc-editor.org
  4. RFC 3629: UTF-8, a transformation format of ISO 10646↗ rfc-editor.org
  5. Unicode Consortium: The Unicode Standard↗ unicode.org
  6. Википедия: Юникод↗ ru.wikipedia.org
  7. Википедия: Растровая графика↗ ru.wikipedia.org
  8. W3C: CSS Color Module Level 4↗ w3.org
  9. W3C: Portable Network Graphics (PNG) Specification↗ w3.org
  10. Википедия: Дискретизация↗ ru.wikipedia.org
  11. Википедия: Импульсно-кодовая модуляция↗ ru.wikipedia.org
  12. ITU-T G.711: Pulse code modulation (PCM) of voice frequencies↗ itu.int
  13. Википедия: Сжатие данных↗ ru.wikipedia.org
  14. Википедия: Шифрование↗ ru.wikipedia.org
  15. Python 3: стандартные кодировки (codecs)↗ docs.python.org

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

Что такое кодирование информации?

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

Как кодируется текст в компьютере?

Каждому символу присваивают номер, а номер записывают в байтах. Стандарт Юникод даёт каждому символу код в виде неотрицательного целого числа, например U+040F. Для записи таких номеров чаще всего используют UTF-8: по RFC 3629 символ занимает от одного до четырёх байт. Латинские буквы и цифры занимают один байт, кириллические буквы — два. Старая кодировка ASCII описывает только 128 символов.

Как кодируется цвет и изображение?

Изображение делят на сетку из пикселей, а цвет каждого пикселя записывают тремя числами: количеством красного, зелёного и синего. Спецификация CSS Color записывает такой цвет в виде #RRGGBB, где каждая пара шестнадцатеричных цифр, от 00 до ff, задаёт одну составляющую. Например, #80C8FF — это красный 128, зелёный 200, синий 255. Эта запись часто встречается в оформлении сайтов. Файловые форматы, например PNG, дополнительно сжимают такие данные.

Чем кодирование отличается от шифрования и сжатия?

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

Почему русский текст в UTF-8 занимает больше места, чем в cp1251?

В UTF-8 кириллическая буква занимает два байта, а в кодировке cp1251 — один. Мы проверили это в Python: слово «привет» занимает 12 байт в UTF-8 и 6 байт в cp1251. Документация Python указывает, что cp1251 (windows-1251) предназначена для русского, белорусского, болгарского и других языков. Зато UTF-8 вмещает символы всех языков сразу, поэтому в интернете её используют чаще. Если открыть файл не в той кодировке, вместо букв появятся «кракозябры».

РедакцияМатериал подготовлен по источникам выше · 7 июля 2026