Представление текстовой информации

Всякий текст состоит из символов — букв, цифр, знаков препинания и т. д., которые человек различает по начертанию. Однако для компьютерного представления текстовой информации такой метод неудобен, а для компьютерной обработки текстов и вовсе неприемлем.

Пример 19. Пусть в компьютере сохранены изображения двух похожих слов («караван» и «каравай»):


Чтобы расположить эти слова в алфавитном порядке, компьютер должен проанализировать, из каких букв состоят слова и в какой последовательности расположены буквы в словах. Но одинаковые буквы изображены на двух картинках по-разному. Эта задача, как и задача нахождения общей части этих двух слов, неразрешима в таком представлении. Действительно, общая часть этих слов должна быть изображением текста «карава». Но поскольку исходные слова записаны по-разному, то соответствующие части изображений тоже выглядят по-разному. А это значит, что если мы выберем изображение текста «карава» из первой картинки, то оно не будет совпадать с соответствующей частью второго изображения.                                                                        

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

Все кодовые таблицы, используемые в любых компьютерах и любых операционных системах, подчиняются международным стандартам кодирования символов. На заре компьютерной эпохи, когда США были абсолютным лидером в этой области, стандарты разрабатывались Американским национальным институтом стандартизации (ANSI); впоследствии для разработки и принятия компьютерных стандартов была создана Международная организация стандартизации (ISO).

В программировании наиболее часто используются однобайтовые кодировки: в них код каждого символа занимает ровно 1 байт, или 8 бит. При этом общее количе-ство различаемых символов составляет 2 8 = 256, а коды символов имеют значения от 0 до 255.

Определение 7. Информационным объемом блока информации называется количество бит, байт или производных единиц (килобайт, мегабайт и т. д.), необходимых для записи этого блока путем заранее оговоренного способа двоичного кодирования.

Задание. Оцените в байтах объем текстовой информации в «Современном словаре иностранных слов» из 740 страниц, если на одной странице размещается в среднем 60 строк по 80 символов (включая пробелы).

Решение. Будем считать, что при записи используется кодировка «один символ — один байт». Количество символов во всем словаре равно 80 • 60 • 740 = 3 552 000. Следовательно, объем в байтах равен 3 552 000 байт = 3 468,75 Кбайт ≈ «3,39 Мбайт.  

Основой для компьютерных стандартов кодирования символов послужил ASCII (American Standard Code for Information Interchange) — американский стандартный код для обмена информацией, разработанный в 1960-х годах и применяемый в США для любых видов передачи информации, в том числе и некомпьютерных (телеграф, факсимильная связь и т. д.). В нем используется 7-битовое кодирование: общее количество символов составляет 27 = 128, из них первые 32 символа — управляющие, а остальные — «изображаемые», т. е. имеющие графическое изображение. Управляющие символы должны восприниматься устройством вывода текста как команды, например:


К изображаемым символам в ASCII относятся буквы английского алфавита (прописные и строчные), цифры, знаки препинания и арифметических операций, скобки и некоторые специальные символы. Фрагмент кодировки ASCII приведен в следующей таблице.


Хотя в ASCII символы кодируются 7 битами, в памяти компьютера под каждый символ отводится ровно 1 байт, при этом код символа помешается в младшие биты, а старший бит не используется.

Главный недостаток стандарта ASCII заключается в том, что он рассчитан на передачу только английского текста. Со временем возникла необходимость кодирования и неанглийских букв. Во многих странах для этого стали разрабатывать расширения ASCII-кодировки. в которых применялись однобайтовые коды символов; при этом первые 128 символов кодовой таблицы совпадали с кодировкой ASCII, а остальные (со  128-го по 255-й) использовались для кодирования букв национального алфавита, символов национальной валюты и т. п. Из-за несогласованности этих разработок для многих языков было создано по нескольку вариантов кодовых таблиц (например, для русского языка их около десятка!).

Впоследствии использование кодовых таблиц было несколько упорядочено: каждой кодовой таблице было присвоено особое название и номер. Указав кодовую таблицу, автоматически выбирают и язык, которым можно пользоваться в дополнение к английскому; точнее, выбирается то, как будут интерпретироваться символы с кодами более 127.

Для русского языка наиболее распространенными являются однобайтовые кодовые таблицы СР-866, Win-dows-1251 и КОИ-8. В них первые 128 символов совпадают с ASCII-кодировкой, а русские буквы размещены во второй части таблицы, однако коды русских букв в этих кодировках различны! Сравните, например, кодировки КОИ-8 (Код Обмена Информацией 8-битовый, международное название koi-8r) и Windows-1251, вторые половины которых приведены в табл. 2 и 3 соответственно.

КОИ-8


Windows 1251


Несовпадение кодовых таблиц приводит к ряду неприятных эффектов, например, так как один и тот же текст (неанглийский) имеет различное компьютерное представление в разных кодировках, то текст, набранный в одной кодировке, будет нечитабельным в другой!

Пример 20. Вот так будет выглядеть десятичный код слова «Диск» в разных кодировках:

КОИ-8                                   228 201 211 203

Windows-1251                     196 232 241 234

СР-866                                 132 168 225 170

Однобайтовые кодировки обладают одним серьезным ограничением: количество различных кодов символов в этих кодировках недостаточно велико, чтобы можно было пользоваться одновременно несколькими языками. Для устранения этого ограничения в 1993 году был разработан новый стандарт кодирования символов, получивший название Unicode, который, по замыслу его разработчиков, позволил бы использовать в текстах любые символы любых языков мира.

В Unicode на кодирование символов отводится 31 бит. Первые 128 символов (коды 0-127) совпадают с таблицей ASCII; далее размещены основные алфавиты современных языков: они полностью умещаются в первой части таблицы, их коды не превосходят 65 536 (65 536 = 2 16). А в целом стандарт Unicode описывает алфавиты всех известных» в том числе и «мертвых», языков; для языков, имеющих несколько алфавитов или вариантов написания (например, японский и индийский), закодированы все варианты; в кодировку Unicode внесены все математические и иные научные символьные обозначения и даже некоторые придуманные языки (например, письменности эльфов и Мордора из эпических произведений Дж. Р. Р. Толкиена). Потенциальная информационная емкость 31-битового Unicode столь велика, что сейчас используется менее одной тысячной части возможных кодов символов!

В современных компьютерах и операционных системах используется укороченная, 16-битовая версия Unicode, в которую входят все современные алфавиты; эта часть Unicode называется базовой многоязыковой страницей (Base Multilingual Plane, BMP). В UNIX-подобных операционных системах, где работа с Unicode-текстами невозможна из-за особенностей архитектуры, используются особые формы этого стандарта, которые называются UTF {Unicode Transformation Form), в них символы кодируются переменным количеством байтов. Например, в UTF-8 коды символов занимают от 1 до 6 байтов.

Last modified: Thursday, 17 January 2019, 2:27 PM