Двоичное кодирование текстовой
информации: кодовые таблицы символов
В качестве основного
средства для обмена информацией с другими людьми человек использует
естественные языки. Таковыми являются, например, русский, английский,
японский и др. Они характеризуются тем, что носят национальный характер.
Естественные языки существуют в устной (фонетика) и письменной форме
(грамматика) (сейчас практически невозможно встретить язык, который не имеет
письменной формы). В основе языка лежит алфавит, т.е. набор символов,
которые используются для построения более крупных конструкций языка. В
разных языках алфавит составляет от нескольких десятков до нескольких
десятков тысяч символов. Вообще естественные языки являются предметом
изучения филологии. В информатике гораздо большее внимание уделяется
формальным языкам.
Основой формальных
языков также служит алфавит. Множество всех символов, с помощью которых
записывается текст, называется алфавитом, а число символов в
алфавите — его мощностью. Но, в отличие от естественных, в
формальных языках он довольно жестко фиксирован. Кроме того, правила
грамматики и синтаксиса здесь более строгие, формализованные,
фиксированные, существует ряд ограничений. В искусственных знаковых
системах отсутствует многозначность. Каждая лексическая единица — слово —
имеет ровно один смысл, и наоборот.
В отличие от
естественных, искусственные языки ориентированы в основном на письменное
представление. Примерами таких языков могут служить язык математики
(математическая символика), физики, химии, музыки (ноты) и т.д. Языки
программирования (и другие средства записи алгоритмов) тоже относятся к
формальным. При автоматизированной обработке информации нет возможности
использования естественных языков.
Кодирование
информации подразумевает преобразование знаков одной знаковой системы в
знаки или группы знаков другой знаковой системы. Обратное преобразование
называют декодированием.
При кодировании
информации для представления ее в памяти ЭВМ используется двоичный способ,
т.е. любая информация, будь то числа, текст, графическое изображение, звук
или видео, представляется универсальным двоичным кодом. Алфавит этого кода
составляют символы 0 и 1. Почему был выбран именно этот способ кодирования?
Дело в том, что в некоторых из первых ЭВМ предпринимались попытки внедрить
десятичный или троичный код, но ни один из этих вариантов кодирования не
дожил до современности. Ответ на вопрос довольно прост: два существенно
различных состояния, представляющих соответственно 0 или 1, технически
реализовать значительно проще, чем все остальные случаи. Действительно,
отсутствие напряжения может изображать 0, наличие— 1; отсутствие
намагниченности участка носителя информации — 0, намагниченность — 1 и
т.д. Поэтому другие варианты были просто изжиты.
Компьютер по праву
считают универсальным преобразователем информации. Для того чтобы сохранить
любую информацию, ее надо закодировать. Компьютер работает отдельно с
каждым символом.
Текстовая информация
состоит из символов: букв, цифр, знаков препинания, скобок и других
символов. Тексты вводятся в память компьютера с помощью клавиатуры или из
файлов. В оперативную память символы алфавита попадают в форме двоичного
кода. В русском языке 33 буквы (символа) — для их кодирования достаточно 33
различных байтов. Если есть потребность различать прописные (заглавные) и
строчные буквы, то потребуется 66 байтов. Для строчных и прописных букв
английского языка хватит еще 52 символов — получается 118. Добавим сюда
цифры (от 0 до 9), все возможные знаки препинания: точку, запятую, тире,
восклицательный и вопросительный знаки. Добавим скобки: круглые, квадратные
и фигурные, а также знаки математических операций: "+", "-", "=", "/", "*".
Добавим специальные символы, например, такие, как: "%", "$", "&", "@", —
все их можно выразить восемью битами, и при этом еще останутся свободные
коды, которые можно использовать для других целей.
Чаще всего каждый символ
текста кодируется восьмиразрядным двоичным кодом. Для представления
текстовой информации в компьютере чаще всего используется алфавит мощностью
256 символов. Один символ такого алфавита несет 8 бит информации: 28
= 256, 8 бит = 1 байту, следовательно, двоичный код каждого символа в
компьютерном тексте занимает 1 байт памяти.
Все символы компьютерного
алфавита пронумерованы от 0 до 255. Каждому номеру соответствует
восьмиразрядный двоичный код от 00000000 до 11111111. Этот код — просто
порядковый номер символа в двоичной системе счисления.
Таблица, в которой всем
символам компьютерного алфавита поставлены в соответствие порядковые
номера, называется таблицей кодировки. В этой таблице должно быть 256
строк, в которых записывается, какой байт какому символу соответствует.
Для разных типов ЭВМ
используются различные таблицы кодировки. С распространением персональных
компьютеров типа IBM PC международным стандартом стала таблица кодировки под
названием ASCII (American Standart Code for Information Interchange) —
Американский стандартный код для информационного обмена. Данную таблицу
кодировки ввел в действие Институт стандартизации США (ANSI –
American
National
Standard
Institute). В
системе
ASCII
закреплены две
таблицы кодирования – базовая и расширенная (альтернативная).
Базовая закрепляет значения кодов от 0 до 127, а расширенная
относится к символам с номерами от 128 до 255. Первые 32 кода базовой
таблицы, начиная с нулевого, отданы производителям аппаратных средств. В
этой области размещаются так называемые управляющие коды, которым не
соответствуют никакие символы языков, и, соответственно, эти коды не
выводятся ни на экран, на устройство печати. Начиная с кода 32 по код 127
размещены коды символов английского алфавита, знаков препинания, цифр,
арифметических действий и некоторых вспомогательных символов. В кодовой
таблице
ASCII
латинские буквы
(прописные и строчные) располагаются в алфавитном порядке. Расположение цифр
также упорядочено по возрастанию значений.
За вторую половину
кодовой таблицы – расширенную - коды от 128 (10000000) до 255 (11111111)
стандарт
ASCII
не отвечает, они
являются национальными. Разные страны могут здесь свои таблицы. Отсутствие
единого стандарта в этой области привело к множественности одновременно
действующих кодировок. Тексты, созданные в одной кодировке, не будут
правильно отображаться в другой.
Рис. 1. Отображение текста при выборе кодировочных таблиц в среде
Explorer
Только в России можно
указать три действующих стандарта кодировки и еще два устаревших (Windows–1251,
КОИ-8,
ISO,
ГОСТ и ГОСТ-альтернативная). Кодировка символов русского языка, известная
как кодировка Windows–1251,была
введена «извне» - компанией
Microsoft, но, учитывая широкое распространение операционных систем
и других продуктов этой компании в России, она глубоко закрепилась и нашла
широкое распространение. Это кодировка используется на большинстве локальных
компьютеров, работающих на платформе
Windows.
Другая распространенная
кодировка носит название КОИ-8 (код обмена информацией, восьмизначный) – ее
происхождение относится к временам действия Совета Экономической
Взаимопомощи. Сегодня кодировка КОИ-8 имеет широкое распространение в
компьютерных сетях на территории России и в российском секторе Интернета.
Международный стандарт, в
котором предусмотрена кодировка символов русского алфавита, носит название
ISO
(International
Standard
Organization
– Международный
институт стандартизации). На практике данная кодировка используется редко.
На компьютерах,
работающих в операционных системах
MS-DOS, могут действовать еще две кодировки (ГОСТ и
кодировка ГОСТ-альтернативная). Первая из них считалась устаревшей даже в
первые годы появления персональной вычислительной техники, но вторая
используется и по сей день.
В настоящее время широкое
распространение получил новый международный стандарт
Unicode,
который отводит на каждый символ не один байт, а два, поэтому с его помощью
можно закодировать не 256 символов, а 216=65536 различных
символов – этого достаточно для размещения в одной таблице всех
широкоупотребляемых языков.
Задачи и упражнения
1.
Оцените
число символов алфавита, кодируемого с помощью двоичных последовательностей
длиной:
а) 4 знака; б) 8 знаков; в) 16 знаков.
2.
Десятичный
код (номер) буквы «о» в таблице кодировки символов
ASCII
равен 111. Что зашифровано с помощью
последовательности десятичных кодов:
а) 115 112 111 114 116; б) 109 111 117 115 101.
3.
Пользуясь
таблицей кодировки символов
ASCII, закодируйте с помощью двоичных кодов следующие слова:
а)
EXCEL;
б)
Word.
4.
По
шестнадцатеричному коду восстановить двоичный код и, пользуясь таблицей
кодировки символов, расшифровать слова:
а)
42 61 73
69 63; б)
50 61 73 63 61 6C.
5.
По
шестнадцатеричному коду восстановить десятичный код и, пользуясь таблицей
кодировки символов, расшифровать слово: 8A 8E 8C 8F 9C 9E 92 85 90.