Двоичное кодирование данных: алфавиты, ASCII и Unicode
Кодирование информации, двоичный алфавит (0 и 1), таблицы кодировки ASCII, Windows-1251, Unicode и вычисление информационного веса текста.
Кодирование — это процесс представления информации одного вида с помощью определенной знаковой системы (кода) по заранее установленным правилам.
Люди с древности кодировали информацию: азбука Морзе кодирует буквы точками и тире, нотная грамота кодирует звуки графическими знаками на нотоносце, а дорожные знаки кодируют правила движения пиктограммами.
Вся вычислительная техника и современные компьютеры работают на основе двоичного кодирования. Двоичный код использует всего два символа: цифры 0 и 1 (двоичный алфавит мощности 2).
Почему именно двоичный код?
1. Техническая простота реализации: в электронике чрезвычайно просто создать надежные микроэлементы с двумя устойчивыми физическими состояниями (есть электрический ток — «1», нет тока — «0», намагничено — «1», размагничено — «0»);
2. Помехоустойчивость: два сигнала легко отличить друг от друга даже при наличии электрических помех в проводах;
3. Простота выполнения математических и логических операций в двоичной системе.
Кодирование
Бит (Bit — binary digit)
Чтобы компьютер мог хранить текст, каждой букве алфавита, цифре и знаку препинания должен быть присвоен свой уникальный порядковый двоичный номер.
Соответствие между символами естественного языка и их числовыми кодами фиксируется в специальных кодовых таблицах.
В 1963 году в США был разработан международный стандарт ASCII (American Standard Code for Information Interchange):
• Базовая таблица ASCII использует 7 бит на символ, кодируя знаков: латинский алфавит (A-Z, a-z), цифры 0-9, знаки препинания и управляющие символы (Enter, пробел);
• Расширенная таблица ASCII использует 8 бит (1 байт) на символ, что позволяет закодировать различных символов;
• Первые 128 кодов (от 0 до 127) во всех странах одинаковы (латиница), а вторая половина таблицы (коды 128-255) используется для национальных алфавитов (например, кириллицы в кодировке Windows-1251).
Таблица ASCII (1 байт)
Проблема «кракозябр»
Из-за наличия сотен несовместимых 8-битных кодовых таблиц текст на разных языках часто отображался нечитаемыми символами. Чтобы навсегда решить эту проблему, был создан консорциум Unicode.
Юникод (Unicode) — универсальный международный стандарт кодирования символов, включающий в себя знаки практически всех письменных языков мира (включая казахский с буквами Ә, Ғ, Қ, Ң, Ө, Ұ, Ү, Һ, І), математические символы, древние иероглифы и даже смайлики эмодзи.
В стандартах Юникода на каждый символ отводится больше памяти:
• UTF-16 использует 16 бит (2 байта) на один символ, что позволяет закодировать различных знаков;
• UTF-32 отводит 32 бита (4 байта) на символ;
• UTF-8 использует переменную длину кода (от 1 до 4 байт) и является главным стандартом современного Интернета.
Unicode (UTF-16 / UTF-8)
2 байта на символ
Важно при расчете задач
Если в условии задачи сказано, что текст набран в кодировке Unicode (UTF-16), вес 1 символа принимается равным 16 битам (2 байтам). Если указана кодировка ASCII или Windows-1251 — 1 символ весит 8 бит (1 байт).
Чтобы вычислить информационный объем текстового документа, необходимо знать общее количество символов в нем и вес одного символа в используемой кодировке.
Формула объема текста: , где:
• I — информационный объем текста (в битах или байтах);
• K — общее количество символов в тексте (включая все буквы, знаки препинания, цифры и обязательно пробелы!);
• i — информационный вес одного символа (бит/символ).
Если текст напечатан на страницах книги, общее число символов рассчитывается по правилу перемножения: .
