Практическое занятие по перекодировке текста



Семинар 3. КОДИРОВАНИЕ ИНФОРМАЦИИ

Общие сведения

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

Символы, которые формируются на экране компьютера, получаются путем соединения двух вещей – набора векторных представлений различных знаков (содержатся в файлах со шрифтами) и кода, который позволяет «выдернуть» необходимый символ из этого набора для того чтобы впоследствии поставить его в нужное место экрана. Получается, что за вид представления отвечают шрифты, а за кодирование – операционная система и программа.

 

Кодировка ASCII

Отправной точкой развития современных кодировок можно считать разработка в 1963 году американскими учеными таблицы ASCII (сокращение от American Standard Code for Information Intercange – американский стандартный код для обмена информацией; 7-ми – разрядная система кодирования).

Эта таблица в общем виде представляет собой сопоставление некоторым распространённым печатным и непечатным символам числовых кодов. Таблица ASCII определяет коды для:

•  десятичных цифр;

•  латинского алфавита;

•  знаков препинания;

•  управляющих символов.

Таблица кодировки ASCII приведена на рис. 4.1.

 

 

  . 0 . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . А . B . C . D . E . F
0 . NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI
1 . DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US
2 .   ! '' # $ % & ' ( ) * + , - . /
3 . 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 . @ A B C D E F G H I J K L M N O
5 . P Q R S T U V W X Y Z [ \ ] ^ _
6 . ` a b c d e f g h i j k l m n 0
7 . p q r s t u v w x y z { | } - DEL

 

Рис. 4.1. Таблица кодов ASCII

 

Таблица состоит из 128 символов и является базовой для множества других кодировок (то есть первые 128 символов «расширенных» кодировок совпадает с кодировкой ASCII).

Каждому символу в таблице ставится число. Принято представлять эти числа в шестнадцатеричной кодировке, например символу * соответствует шестнадцатеричное число 2А.

Перевод двоичного числа в шестнадцатеричное выполняется очень просто – байт разбивается на 2 части по 4 бита. Каждые 4 бита могут кодировать только 16 значений, каждое из которых можно представить шестнадцатеричным числом.

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

Также следует отметить, что один байт информации, представляющий символ в двоичной системе счисления может иметь не 128 состояний (наборов 0 и 1), а 28=256. Разумно использовать оставшиеся 128 свободных состояний для расширения числа закодированных символов.

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

Так, например, кодировка символов русского языка Windows-1251 используется для компьютеров, работающих под ОС Windows. Другая кодировка для русского языка – это КОИ-8, которая также широко используется в компьютерных сетях и российском секторе Интернет.

В настоящее время существует универсальная система UNICODE, основанная на 16 – разрядном кодировании символов. Эта 16 – разрядная система обеспечивает универсальные коды для 65536 различных символов, т.е. в этой таблице могут разместиться символы языков большинства стран мира.

 

Кодировка KOI-8

KOI-8 (или КОИ-8 – код обмена информацией) – восьмибитовая кодировка, широко используемая ранее как одна из основных кодировок в UNIX-совместимых операционных системах. В настоящее время имеет не столь высокую популярность в связи с внедрением кодировки Unicode.

Существует несколько вариантов кодировки КОИ-8 для различных кириллических алфавитов. Например, русский алфавит описывается в кодировке KOI-8-R, украинский — в KOI-8-U.

KOI-8-R – эта кодировка как и многие другие представляет собой расширение кодировки ASCII символами русского языка и символами псевдографики. Наличие большого числа символов псевдографики связано с тем, что разработка таблицы приходилось на времена, когда графические операционные системы не были распространены как у нас – псевдографика позволяла разнообразить оформление текстов в таких системах.

Первые 128 позиций кодировки полностью совпадают с таблицей ASCII. Расширенная ее часть приведена на рис. 4.2.

 

  . 0 . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . А . B . C . D . E . F
8 .
9 .   ° ² · ÷
A . ё
B . Ё ã
C . ю а б ц д е ф г х и й к л м н о
D . п я р с т у ж в ь ы з ш э щ ч ъ
E . Ю А Б  Ц Д Е Ф Г Х И Й К Л М Н О
F . П Я Р С Т У Ж В Ь Ы З Ш Э Щ Ч Ъ

 

Рис. 4.2. «Дополнительная» часть таблицы кодов КОI-8

 

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

Это означает, что если в тексте, написанном в КОИ-8, убрать восьмой бит каждого символа, то получится «читаемый» текст, подобный транслиту. Например, слова «Русский Текст» превратятся в «rUSSKIJ tEKST». Из-за этого символы кириллицы расположены не в алфавитном порядке.

Сперва в кодировке расположены строчные буквы, далее – заглавные.

 

Кодировка Windows 1251

Это более современная версия расширения ASCII, чем KOI-8, разработанная во времена широкого использования графических операционных систем. Таким образом, элементы псевдографики в ней практически отсутствуют. Вместо этого в кодировку включены символы типографики и символы языков, близких к славянским (белорусский, украинский и пр.).

Буквы русского алфавита расположены в алфавитном порядке с 192 по 255 позиции, за исключением букв Ё и ё, расположенных ранее.

Первые 128 позиций кодировки полностью совпадают с таблицей ASCII. Другая ее часть приведена на рис. 4.3.

 

  . 0 . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . А . B . C . D . E . F
8 . Ђ Ѓ ѓ Љ Њ Ќ Ћ Џ
9 . ђ   љ њ ќ ћ џ  
A .   Ў ў Ј ¤ Ґ ¦ § Ё © Є «     ® Ї
B . ° ± І і ґ µ · ё є » ј Ѕ ѕ ї
C . А Б В Г Д Е Ж З И Й К Л М Н О П
D . Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
E . а б в г д е ж з и й к л м н о п
F . р с т у ф х ц ч ш щ ъ ы ь э ю я

 

Рис. 4.3. «Дополнительная» часть таблицы кодов Windows1251

 

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

Для исключения проблем, в настоящее время созданы многочисленные таблицы перекодировок, которые, однако, полностью проблему не решают.

Для решения описанной выше проблемы были предприняты попытки разработки новой универсальной вариации кодирования, которая бы заменила все существующие решения и была пригодна для китайского языка, где число символов более 256.

Для поставленных выше целей в 1991 году была предложена новая уникальная система кодировки Unicode – UTF8, 16 или 32 (первоначально UTF32). Число после названия указывает число бит, используемых для представления одного символа в кодировке. В итоге размер текстового файла будет увеличен в 4 раза (при использовании кодировок 8 и 32 бита), но в данном представлении возможно закодировать миллиарды символов. Впоследствии пришло осознание, что это представление излишне, была разработана кодировка UTF16, которая была признана более удачной.

В кодировке возможно представить 216 – 65636 символов.

Но и это впоследствии было признано избыточным и появилась новая кодировка UTF8, имеющая переменную длину от 1 до 6 байт (на практике до 4). В ней привычные латинские символы кодируются 1 байтом, совпадающим с ASCII. Таким образом, было создано единое кодовое пространство, производители шрифтом могут заполнять его векторными формами.

 

Практическое занятие по перекодировке текста

ФОРМУЛИРОВКА ЗАДАНИЯ

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

 

ПРИНЦИП ПЕРЕКОДИРОВКИ

 

Кодовые наборы ср1251 и КОИ-8 являются расширением кода ASCII для строчных и заглавных букв алфавита кириллицы. Они кодируются натуральными числами из 8 бит в диапазоне от 0300 (192, С0) до 0377 (255, FF). Этот диапазон делится на 2 равные части для строчных и заглавных букв. При этом коды любой строчной и заглавной буквы отличаются на 040 (32, 20), а разность кодов соседних букв равна 1. В кодовом наборе ср1251 заглавные и строчные буквы перечислены в алфавитном порядке, сначала заглавные, потом строчные:

 


Дата добавления: 2019-11-16; просмотров: 420; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!