logo
Informatika_v_sisteme_nauk_33__33__33__33_ekz

Кодирование информации. Кодовая таблица. Система кодирования ascii. Система кодирования unicode.

Кодирование информации -- это процесс формирования определенного представления информации. 

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

Кодовая таблица

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

Таким образом, в кодовой таблице представлено определенное количество строк и только два столбца:

Определение

Кодовая таблица — это совокупность цифровых (двоичных) кодов и их значений.

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

А пока поговорим о построении кодовой таблицы.

Первая проблема, которую нам предстоит решить, заключается в том, чтобы определить количество строк, т. е. мы сначала должны задаться количеством разрядов, как это выяснилось в предыдущем разделе. Но возникает следующий вопрос: а чем это определяется, какой необходимостью?

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

Двоичные коды

Значение кодов

0

1

Да

Нет

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

Двоичные коды

Значение кодов

00

01

10

Да

Нет

Не знаю


Самая распространенная система кодирования латиницы — ASCII — использует 7 бит на символ. Другие алфавиты обычно кодируются более сложным образом: символы алфавита получают коды в диапазоне от 128 до 255, а коды от 0 до 127 соответствуют кодам ASCII. Таким образом, любой символ этих алфавитов, в том числе и в многоязычных текстах, использующих сочетание национального алфавита и латиницы, может быть представлен 8-ю битами или одним байтом. Но для японских слоговых азбук, а тем более для китайской иероглифики, 255 кодов явно недостаточно, и приходится использовать многобайтовые кодировки. Распространенное обозначение таких кодировок — DBCS (Double Byte Character Set — набор символов, кодируемый двумя байтами). Двух байтов, в принципе, достаточно, чтобы сформировать единую кодировку для всех современных алфавитов и основных подмножеств иерогли-фнки. Попытка стандартизовать такое представление — Unicode — пока что не имеет полного успеха. Отчасти это можно объяснить тем, что потребность в представлении разноязыких текстов в пределах одного документа ограничена, кроме того, слишком много старого программного обеспечения использует предположение о том, что символ занимает не более байта. Такие программы не могут быть легко преобразованы для работы с Unicode. Используются две основные кодировки латиницы -- ASCII и EBCDIC (Extended Binary Coded Decimal Information Code), применяемая системами AS/400, System/370, System/390 и z90 фирмы IBM. Для представления русского варианта кириллицы существует три основных кодировки: альтернативная (известная также как ср866), ср!251 и KOI-8 и ряд менее широко используемых (ISO 8892-5 и др.). Арифметические операции над такими "числами" обычно бессмысленны, зато большой смысл имеют операции сравнения. Операции сравнения в современных процессорах реализованы как неразрушающее вычитание — мы производим те же действия, что и при обычном двоичном вычитании, но запоминаем не сам результат, а лишь флаги знака, переноса и равенства результата нулю. На основании значений этих флагов определяем результат сравнения: если разность равна нулю, сравниваемые символы одинаковы, если она положительна или отрицательна, один из символов больше или меньше другого. Естественно, чаще всего мы хотим интерпретировать результаты посимвольного сравнения как лексикографическое (алфавитное) "больше" или "меньше" (для русского алфавита, "а" меньше, чем "б"). Проще всего это делать, если нумерация символов совпадает с их порядком в алфавите, но далеко не для всех распространенных кодировок это справедливо. В кодировке ASCII (American Standard Code for Information Interchange — Американский стандартный код обмена информацией), например, все символы латиницы, цифры и большинство распространенных знаков препинания обозначаются кодами от 0 до 127, при этом коды букв расставлены в соответствии с латинским алфавитом. В США, как и в других англоязычных странах, латинский алфавит используется в неизмененном виде, а для передачи звуков, отсутствовавших в оригинальном латинском языке, применяется причудливая орфография. Большинство других европейских алфавитов обходит проблему несоответствия фонетик путем расширения набора символов латиницы — например, в немецком языке добавлены буквы ö, ä, ü и ß. Другие языки имеют множество различных "акцентов" и "диакритических символов", расставляемых над буквами для указания особенностей произношения. Некоторые языки, например французский, используют одновременно и расширения алфавита, и причудливую орфографию. Нередко встречаются и дополнительные знаки препинания, например, ¿ и ¡ в испанском языке. Все символы-расширения в каждом из национальных алфавитов находятся на определенных местах, но при использовании кодировки ASCII для представления этих символов сохранить этот порядок невозможно — соответствующие коды уже заняты. Так, в кодировке ISO 8895-1 все символы латиницы кодируются в соответствии с ASCII, а коды расширений более или менее произвольно раскиданы между 128 и 255. Более яркий пример той же проблемы — кодировки кириллицы семейства KOI, в которых символы кириллицы сопоставлены фонетически соответствующим им символам латиницы (филе нот фоунд, или, наоборот, esli wy не movete pro^itatx eto po-russki, smenite kodirovku). Естественно, совместить такое сопоставление и алфавитную сортировку невозможно. Стандартным решением в таких случаях является использование для сравнения и лексикографической сортировки промежуточных таблиц, в которых для каждого допустимого кода указан его номер в лексикографическом порядке. На уровне системы команд процессоры этого обычно не делают, но на уровне библиотек языков высокого уровня это осуществляется очень часто.

Универсальная система кодирования текстовых данных.

Если проанализировать организационные трудности, связанные с созданием единой системы кодирования текстовых данных, то можно прийти к выводу, что они вызваны ограниченным набором кодов (256). В то время, очевидно, что если, например, кодировать символы не восьмиразрядными двоичными числами, а числами с большим количеством разрядов, то и диапазон возможных значений кодов станет намного больше. Такая система, основанная на 16-разрядном кодировании символов, получила название универсальной Unicode . Шестнадцать разрядов позволяют обеспечить уникальные коды для 65536 различных символов – этого поля достаточно для размещения в одной таблице символов большинства языков планеты.

Несмотря на тривиальную очевидность такого подхода, простой механический переход на данную систему долгое время сдерживался из-за недостаточных ресурсов средств вычислительной техники (в системе кодирования UNICODE все тестовые документы автоматически становятся вдвое длиннее). Во второй половине 90-х годов технические средства достигли необходимого уровня обеспеченности ресурсами, и сегодня наблюдается постепенный переход документов и программных средств н универсальную систему кодирования.

Кодировка Unicode.

В системе Unicode (другое название ISO International Standard Organization ) для представления любого символа используется уже не один , а два байта. Поскольку в этом случае число возможных символов равно 2•10 16 или 65536 , то могут удовлетворяться практически любые потребности всех национальных языков. В настоящее время система Unicode стала “ de facto ” мировым стандартом. Тем не менее, вряд ли на этом все и остановится. Несмотря на огромное количество возможных кодов (символов), система Unicode все же не способна удовлетворить всем типографским требованиям. Так что, процесс пошел, но “ еще не вечер ...”