Кодирование текста

Начиная с конца 60-х годов, компьютеры все больше стали использоваться для обработки текстовой информации и в настоящее время большая часть персональных компьютеров в мире (и наибольшее время) занято обработкой именно текстовой информации.

 

ASCII — базовая кодировка текста для латиницы

Традиционно для кодирования одного символа используется количество информации, равное 1 байту, то есть I = 1 байт = 8 битов.

Для кодирования одного символа требуется 1 байт информации. Если рассматривать символы как возможные события, то можно вычислить, какое количество различных символов можно закодировать: N = 2I = 28 = 256.

Такое количество символов вполне достаточно для представления текстовой информации, включая прописные и строчные буквы русского и латинского алфавита, цифры, знаки, графические символы и пр. Кодирование заключается в том, что каждому символу ставится в соответствие уникальный десятичный код от 0 до 255 или соответствующий ему двоичный код от 00000000 до 11111111.

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

Пользователь нажимает на клавиатуре клавишу с символом, и в компьютер поступает определенная последовательность из восьми электрических импульсов (двоичный код символа). Код символа хранится в оперативной памяти компьютера, где занимает один байт. В процессе вывода символа на экран компьютера производится обратный процесс — декодирование, то есть преобразование кода символа в его изображение. В качестве международного стандарта принята кодовая таблица ASCII (American Standart Code for Information Interchange) Таблица стандартной части ASCII Важно, что присвоение символу конкретного кода — это вопрос соглашения, которое фиксируется в кодовой таблице. Первые 33 кода (с 0 по 32) соответствуют не символам, а операциям (перевод строки, ввод пробела и так далее). Коды с 33 по 127 являются интернациональными и соответствуют символам латинского алфавита, цифрам, знакам арифметических операций и знакам препинания. Коды с 128 по 255 являются национальными, то есть в национальных кодировках одному и тому же коду соответствуют различные символы.

К сожалению, в настоящее время существуют пять различных кодовых таблиц для русских букв (КОИ8, СР1251, СР866, Mac, ISO), поэтому тексты, созданные в одной кодировке, не будут правильно отображаться в другой.

В настоящее время широкое распространение получил новый международный стандарт Unicode, который отводит на каждый символ не один байт, а два, поэтому с его помощью можно закодировать не 256 символов, а N = 216 = 65536 различных

Юникод — появление универсальной кодировки текста (UTF 32, UTF 16 и UTF 8 )

Эти тысячи символов языковой группы юго-восточной Азии никак невозможно было описать в одном байте информации, который выделялся для кодирования символов в расширенных кодировках ASCII. В результате был создан консорциум под названием Юникод (Unicode — Unicode Consortium) при сотрудничестве многих лидеров IT индустрии (те, кто производит софт, кто кодирует железо, кто создает шрифты), которые были заинтересованы в появлении универсальной кодировки текста.

Первой кодировкой текста, вышедшей под эгидой консорциума Юникод, была кодировка UTF 32. Цифра в названии кодировки UTF 32 означает количество бит, которое используется для кодирования одного символа. 32 бита составляют 4 байта информации, которые понадобятся для кодирования одного единственного символа в новой универсальной кодировке UTF 32.

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

Но многим странам с языками европейской группы такое огромное количество символов использовать в кодировке вовсе и не было необходимости, однако при использовании UTF 32 они ни за что ни про что получали четырехкратное увеличение веса текстовых документов, а в результате и увеличение объема интернет трафика и объема хранимых данных. Это много и такое расточительство себе никто не мог позволить.

В результате развития универсальной кодировки Юникод появилась UTF 16, которая получилась настолько удачной, что была принята по умолчанию как базовое пространство для всех символов, которые у нас используются. UTF 16 использует два байта для кодирования одного символа. Например, в операционной системе Windows вы можете пройти по пути Пуск — Программы — Стандартные — Служебные — Таблица символов.

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

Юникод UTF 16

Сколько символов можно закодировать в UTF 16 с помощью 16 бит? 65 536 символов (два в степени шестнадцать) было принято за базовое пространство в Юникод. Помимо этого существуют способы закодировать с помощью UTF 16 около двух миллионов символов, но ограничились расширенным пространством в миллион символов текста.

Но даже удачная версия кодировки Юникод под названием UTF 16 не принесла особого удовлетворения тем, кто писал, допустим, программы только на английском языке, ибо у них после перехода от расширенной версии кодировки ASCII к UTF 16 вес документов увеличивался в два раза (один байт на один символ в ASCII и два байта на тот же самый символ в кодировке UTF 16). Вот именно для удовлетворения всех и вся в консорциуме Юникод было решено придумать кодировку текста переменной длины.

Такую кодировку в Юникод назвали UTF 8. Несмотря на восьмерку в названии UTF 8 является полноценной кодировкой переменной длины, т.е. каждый символ текста может быть закодирован в последовательность длинной от одного до шести байт. На практике же в UTF 8 используется только диапазон от одного до четырех байт, потому что за четырьмя байтами кода ничего уже даже теоретически не возможно представить.

В UTF 8 все латинские символы кодируются в один байт, так же как и в старой кодировке ASCII. Что примечательно, в случае кодирования только латиницы, даже те программы, которые не понимают Юникод, все равно прочитают то, что закодировано в UTF 8. Т.е. базовая часть кодировки ASCII перешла в UTF 8.

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

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

 

интересные источники по теме:

http://www.youtube.com/watch?v=3BDE0oxevUQ - "Кодирование текстовой информации" видеоурок

видео-урок "Кодирование текстовой информации в компьютере"

Рассчетные задачи по теме:

Задача 1

В кодировке Unicode на каждый символ отводится 2 байта. Определите информационный объем слова из двадцати четырех символов в этой кодировке.

Решение:

Объем равен 24*2байта = 48 байт = 48* 8 бит = 384 бита

 

Задача 2

Автоматическое устройство осуществило перекодировку информационного сообщения на русском языке, первоначально записанного в 16-битном коде Unicode, в 8-битную кодировку КОИ-8. При этом информационное сообщение уменьшилось на 480 бит. Какова длина сообщения в символах?

Решение:

Количество символов в сообщении n. Значит в 16-битном коде - Unicode объём будет равен 16*n бит, а в 8-битной кодировке КОИ-8 8*n бит. Получим уравнение из условия задачи

16*n = 8*n + 480, 8*n = 480, n = 60.

Длина сообщения будет состоять из 60 символов.

 

Задача 3

Автоматическое устройство осуществило перекодировку информационного сообщения на русском языке, первоначально записанного в 16-битном коде Unicode, в 8-битную кодировку КОИ-8. При этом информационное сообщение уменьшилось на 800 бит. Какова длина сообщения в символах?

Решение:
Изменение кодировки с 16 бит на 8 бит, равно 16 - 8 = 8 бит .Следовательно информационный объем каждого символа сообщения уменьшился на 8 бит. Так как объем информационного сообщения уменьшился на 800 бит, следовательно количество символов в сообщение равно 800/8=100.
Ответ: Длина сообщения - 100 символов.

 

Задача 4

Автоматическое устройство осуществило перекодировку информационного сообщения длиной 48 символов, первоначально записанного в 7–битном коде ASCII, в 16–битную кодировку Unicode. На сколько при этом увеличилось информационное сообщение?

Решение:

Изменение кодировки с 7 бит на 16 бит, равно 16 - 7 = 9 бит. Следовательно информационный объем каждого символа сообщения увеличился на 9 бит.Так как длина сообщения равна 48 символов, информационное сообщение увеличилось на 48 * 9 = 432 бита. В предложенных ответах данного ответа нет, следовательно переведем биты в байты - 432/8 = 54 байта.
Ответ: Информационное сообщение увеличилось на 54 байта.

 

Задача 5

Автоматическое устройство осуществило перекодировку информационного сообщения на русском языке, первоначально записанного в 16–битном коде Unicode, в 8–битную кодировку Windows–1251, при этом информационный объем сообщения составил 60 байт.
Определите информационный объем сообщения до перекодировки.

Решение:

По условиям задачи информационный объем сообщения после кодировки составил 60 байт = 480 бит, следовательно количество символов в сообщении = 480/8 = 60. До перекодировки сообщение кодировалось 16-битным кодом, следовательно информационный объем сообщения до перекодировки = 60 * 16 = 960 бит.
Ответ: информационный объем сообщения до перекодировки 960 бит.

 

Задача 6

Автоматическое устройство осуществило перекодировку информационного сообщения, первоначально записанного в 7-битном коде ASCII, в 16-битную кодировку Unicode. При этом информационное сообщение увеличилось на 108 бит. Какова длина сообщения в символах?

Решение:

Изменение кодировки с 7 бит на 16 бит, равно 16 - 7 = 9 бит. Следовательно информационный объем каждого символа сообщения увеличился на 9 бит. По условиям задачи информационный объем сообщения после кодировки составил 108 бит, следовательно количество символов сообщения = 108/9 = 12.
Ответ: длина сообщения 12 символов.

 

Домашнее задание по теме
Решить в тетради задачи, прописанные в файле-приложении. Показать учителю
Кодирование текстовой информации задачи.
Microsoft Word документ 12.7 KB