Урок №15. Кодирование текстов. Равномерные и неравномерные коды.
С точки зрения компьютера, текст — это последовательность символов: букв (прописных или строчных, русских и латинских), цифр, знаков препинания, скобок, математических знаков, пробелов между словами.
Поскольку в современных компьютерах все виды информации представлены в двоичном коде, все символы нужно закодировать в виде цепочек нулей и единиц.
Часто для символов используют равномерное кодирование, при котором каждый символ кодируется одним и тем же количество битов.
Пусть кодовое слово для символа занимает 5 бит. Сколько различных символов можно закодировать с помощью такого кода?
Пусть требуется закодировать 35 различных символов. Сколько бит нужно выделить на каждый символ?
Обычно поступают следующим образом:
- определяют, сколько символов нужно использовать (обозначим это число — мощность алфавита языка, на котором создан текст, через М);
- определяют нужное количество двоичных разрядов i так, чтобы с их помощью можно было закодировать не менее М разных символов (т. е. 21 > М);
- составляют кодовую таблицу, в которой каждому символу сопоставляют код — целое число в интервале от 0 до 2* — 1;
- коды символов переводят в двоичную систему счисления.
В текстовых файлах (которые не содержат оформления, например, в файлах с расширением txt) хранятся не изображения символов, а их коды. Откуда же компьютер берет изображения символов, когда выводит текст на экран? Оказывается, при этом с диска загружается специальный шрифтовой файл. В нём хранятся изображения символов, соответствующие каждому из кодов. Именно эти изображения и выводятся на экран. Это значит, что при изменении шрифта текст, показанный на экране, может выглядеть совсем по-другому. Например, многие шрифты не содержат изображений русских букв. Поэтому, когда вы передаёте (или пересылаете) кому-то текстовый файл, нужно убедиться, что у адресата есть использованный вами шрифт.
В шрифтовом файле для каждого кода хранится изображение соответствующего символа. Поэтому очень важно, чтобы код, например буквы А, был одинаковым на всех компьютерах. Если два компьютера будут использовать разные кодовые таблицы, то, даже используя один и тот же шрифт, мы увидим два совершенно разных текста.
Современные текстовые процессоры умеют внедрять шрифты в файл. Хотя файл увеличивается в объёме, адресат увидит его в таком же виде, что и вы.
Используя дополнительные источники, найдите ответы на вопросы.
— Какие расширения имеют шрифтовые файлы?
— Как внедрить шрифт в документ в текстовом процессоре, который вы используете?
Теперь подумаем, как декодировать полученное двоичное сообщение, в котором закодирован текст. Для этого нам нужно знать, какой символ (буква, цифра и т. п.) соответствует каждому из принятых двоичных кодов, т. е. нужна кодовая таблица.
Для передачи текстов разработаны стандарты, которые закрепляют определённые коды за символами. Основной международный стандарт — 7-битная кодировка ASCII, в которую входят 27 = 128 символов с кодами от 0 до 127:
- цифры от «О» до «9» с кодами от 48 до 57;
- латинские буквы: прописные, от «А» до «Z» (с кодами от 65 до 90) и строчные от «а» до «z» (с кодами от 97 до 122);
- знаки препинания:
- скобки: []{}()
- математические символы: +-*/=< >
- некоторые другие знаки:
Используя дополнительные источники, найдите ответы на вопросы.
— Как расшифровать сокращение ASCII?
— Какие символы имеют коды от 0 до 32?
— Как, зная код прописной латинской буквы, определить код соответствующей строчной буквы?

В современных компьютерах память состоит из 8-битных ячеек — байтов. Поэтому к кодам ASCII можно добавить ещё один (старший) бит, таким образом, получается 8-битная кодировка. Этот дополнительный бит позволяет добавить в таблицу ещё 128 символов с кодами от 128 до 255. Такое расширение ASCII часто называют кодовой страницей. Первую половину кодовой страницы (коды от 0 до 127) занимает стандартная таблица ASCII, а вторую — символы национальных алфавитов (например, русские буквы):

Для русского языка существуют несколько кодовых страниц, которые были разработаны для разных операционных систем. Наиболее известны:
- Windows-1251 (СР-1251) — в системе Windows;
- KOI8-R — в Unix-совместимых операционных системах и электронной почте;
- альтернативная кодировка СР-866;
- MacCyrillic — на компьютерах компании Apple.
Проблема состоит в том, что, если набрать русский текст в одной кодировке (например, в Windows-1251), а просматривать в другой (например, в KOI8-R), текст будет очень сложно прочитать:

Для веб-страниц в Интернете часто используют кодировки Windows-1251 и KOI8-R. Браузер после загрузки страницы пытается автоматически определить её кодировку. Если ему это не удаётся, вы увидите странный набор букв вместо понятного русского текста. В этом случае нужно сменить кодировку вручную с помощью меню Вид.
Используя дополнительные источники, найдите ответы на вопросы.
— Что такое псевдографика и зачем она использовалась?
— В каких операционных системах для русских текстов используется кодировка СР-866?
— Найдите коды русских букв «А», «В», «П», «Р», «Я» в кодировках СР-866, CP-1251, KOI-8R, MacCyrillic;
— В каких кодировках русские буквы расположены по алфавиту, а в каких — нет?
Любая 8-битная кодовая страница имеет серьезное ограничение — она может включать только 256 символов. Поэтому не получится набрать в одном документе часть текста на русском языке, а часть — на китайском.
Для решения этих проблем в 1991 году был принят новый стандарт UNICODE, который позволяет хранить в одной таблице коды символов любых существующих (и даже некоторых мёртвых) языков, математические и музыкальные символы и др.
Если мы хотим хранить в кодовой таблице больше разных символов, нужно увеличивать место, которое отводится под код каждого символа. Например, если на каждый символ выделить два байта, то можно закодировать 216 = 65 536 символов. В современной версии UNICODE можно использовать до 1112 064 различных символов. Символы из таблицы ASCII имеют в UNICODE те же самые коды, т. е. эти стандарты совместимы между собой.
В системе Windows используется кодировка UNICODE, называемая UTF-16 (от англ. UNICODE Transformation Format — формат преобразования UNICODE). В ней все наиболее важные символы кодируются с помощью 16 бит (2 байт), а редко используемые — с помощью 4 байт.
В UNIX-подобных системах, например в Linux, чаще применяют кодировку UTF-8. В ней все символы, входящие в таблицу ASCII, кодируются с помощью 1 байта, а другие символы могут занимать от 2 до 6 байт. Текст, состоящий только из символов таблицы ASCII, кодируется точно так же, как и в кодировке ASCII, и его размер получается в два раза меньше, чем при использовании UTF-16. По данным поисковой системы Google, на конец 2014 года более 80% сайтов в Интернете использовали кодировку UTF-8.
Главное достоинство кодировок UNICODE в том, что они позволяют использовать символы разных языков в одном документе. За это приходится расплачиваться увеличением объёма файлов.
Используя дополнительные источники, найдите ответы на вопросы.
— Сколько символов сейчас добавлено в таблицы UNICODE?
— Сколько байт отводится на каждую русскую букву в кодировке UTF-8?
— Как будет выглядеть фраза «Здравствуй, мир!», если набрать её в кодировке UTF-8, а просматривать — в кодировке Windows-1251?
Информационный объём текста — это количество информации, заключённое в этом тексте. Текст, как и все виды данных, хранится в памяти компьютера в двоичном коде. Поэтому за информационный объём текста принимают длину цепочки битов, в которой закодирован текст.
Часто тексты кодируются с помощью равномерного кода. Это значит, что на каждый символ выделяется одинаковое количество бит.
При равномерном кодировании информационный объём сообщения вычисляется по формуле
I = L•i,
где L — длина сообщения (количество символов), a i — длина кодового слова каждого символа.
Определите информационный объём сообщения
ПУСТЬ ВСЕГДА БУДЕТ СОЛНЦЕ!
при использовании 16-битной кодировки.
Выпишите в тетрадь все различные символы, которые используются в сообщении
МАША ЛЮБИТ КАШУ.
Сколько бит нужно выделить на каждый символ, если никаких других символов в сообщении нет?
Определите информационный объём (в килобайтах) брошюры, в которой 10 страниц текста, на каждой странице 32 строки по 64 символа в каждой, используется 8-битная кодировка.
Во многих задачах на определение количества информации можно значительно упростить вычисления, если записывать все величины как степени числа 2.
Например, в последней задаче 32 = 25, 64 = 26. Поэтому количество символов на странице равно 32 • 64 = 25 • 26 = 211, а общее количество символов в брошюре: L = 10 • 211.
Каждый символ занимает 8 бит (1 байт), поэтому информационный объём текста равен 10 • 211 байт. Вспомним, что 1 Кбайт = 1024 байта = 210 байт, поэтому для того, чтобы перевести количество информации из байтов в килобайты, нужно разделить число на 210. Получаем:

Текст романа А. С. Пушкина «Евгений Онегин» занимает 187 страниц, на каждой странице напечатано в среднем 885 символов. Оцените информационный объём этого текта (в килобайтах), если он записан в 16-битной кодировке.