Кодирование текста
ПОНЯТЬ
Несмотря на то, что компьютер первоначально создавался как вычислительная машина, непосредственно численные расчеты занимают сегодня не самое важное место в кругу задач, решаемых пользователями компьютера. Значительно чаще он используется как очень удобная и многофункциональная пишущая машинка для создания текстовых документов.

Когда в текстовом редакторе Вы набираете текст, то на экране и на распечатке принтера он представлен в привычном для нас виде. Но как этот текст и составляющие его символы хранятся, передаются и обрабатываются в компьютере?
В привычных для нас текстах встречаются не только прописные и строчные буквы кириллицы и латиницы, но и цифры, знаки препинания (точка, запятая, тире, двоеточие, вопросительный и восклицательный знаки и т.п.), разделители (пробелы, скобки, кавычки, апострофы и т.п.), специальные знаки (#, №, %) и др.
Вы знаете, что в компьютере используется двоичное кодирование. Следовательно, нужно в двоичном алфавите закодировать все эти символы. В каком порядке их кодировать? В общем-то всё равно. Главное, чтобы разным символам соответствовали различные коды. Желательно также, но не обязательно, чтобы порядок кодов для букв алфавита и цифр соответствовал привычному для нас способу упорядочивания. А для остальных знаков нет никакого «привычного» порядка – их можно кодировать в любом порядке.
Построение кода сводится к следующему:
определяется количество и состав основных символов, которые могут встретиться в тексте;
в зависимости от этого количества вычисляют длину кода (напомним, что при двоичном кодировании можно использовать только код постоянной длины);
все возможные последовательности нулей и единиц выбранной длины записываются в одну колонку таблицы кодировки;
в другой колонке таблицы перечисляются в каком-либо порядке все основные символы, которые могут встретиться в тексте – тем самым каждому символу ставится в соответствие его двоичный код;
полученной таблице кодировки даётся название.
Пример
Фрагмент (последние 32 символа) таблиц кодировки КОИ-8 (код обмена информации восьмибитный) и СР-1251 (кодовая таблица стандарта 1251). Для удобства восприятия двоичный код представлен еще в виде привычных нам десятичных чисел.
| Двоичный код | Десятичный код | Буква кода КОИ-8 | Буква кода СР-1251 | | Двоичный код | Десятичный код | Буква кода КОИ-8 | Буква кода СР-1251 |
| 1110 0000 | 224 | Ю | а | 1111 0000 | 240 | П | р |
| 1110 0001 | 225 | А | б | 1111 0001 | 241 | Я | с |
| 1110 0010 | 226 | Б | в | 1111 0010 | 242 | Р | т |
| 1110 0011 | 227 | Ц | г | 1111 0011 | 243 | С | у |
| 1110 0100 | 228 | Д | д | 1111 0100 | 244 | Т | ф |
| 1110 0101 | 229 | Е | е | 1111 0101 | 245 | У | х |
| 1110 0110 | 230 | Ф | ж | 1111 0110 | 246 | Ж | ц |
| 1110 0111 | 231 | Г | з | 1111 0111 | 247 | В | ч |
| 1110 1000 | 232 | Х | и | 1111 1000 | 248 | Ь | ш |
| 1110 0111 | 233 | И | й | 1111 1001 | 249 | Ы | щ |
| 1110 1010 | 234 | Й | к | 1111 1010 | 250 | З | ъ |
| 1110 1011 | 235 | К | л | 1111 1011 | 251 | Ш | ы |
| 1110 1100 | 236 | Л | м | 1111 1100 | 252 | Э | ь |
| 1110 1101 | 237 | М | н | 1111 1101 | 253 | Щ | э |
| 1110 1110 | 238 | Н | о | 1111 1110 | 254 | Ч | ю |
| 1110 1111 | 239 | О | п | 1111 1111 | 255 | Ъ | я |
Отсутствие жёстких требований к выбору способа кодирования текстов привело к тому, что на сегодняшний день существует множество разных таблиц кодировки символов. Иначе их иногда называют содовыми таблицами (code page).
Самой известной таблицей кодировки является код ASCII (Американский стандартный код обмена информацией). Первоначально он был разработан для передачи текстов по телеграфу, причем в то время он был 7-битовым, то есть для кодирования символов английского языка, служебных и управляющих символов использовались только 27=128 7-битовых комбинаций нулей и единиц. При этом первые 32 комбинации (кода) служили для кодирования управляющих сигналов (начало текста, конец строки, перевод каретки, звонок, конец текста и т.д.).
Пример
Команда «ввод» (клавиша «Enter») имеет десятичный код 13 (двоичный код 00001101), клавиша «Esc» - код 27, клавиша «пробел» - код 32.
В 70-х годах этот код был использован для представления символов в компьютере. Но его сделали 8-битным, то есть 1 символ кодировался 1 байтом. В таблице кодировки стало возможным представить 28=256 символов. К двоичному коду символов исходного кода ASCII добавили 0 в старший бит. Значения байта со старшим битом, равным 1, стали использовать для представления символов псевдографики, математических знаков и т.п.
Пример
Символ «1» имеет десятичный код 49, латинские буквы «А» - 65, «W» - 87, «а» - 96.
Для того, чтобы полноценно поддерживать помимо международного английского и другие языки, было разработано несколько кодовых таблиц, ориентированных на конкретные страны. Так для скандинавских стран была предложена таблица 865 (Nordic), для арабских стран - таблица 864 (Arabic) и т.д. В этих таблицах часть кодов из второй половины кодовой таблицы использовалась для представления символов национальных алфавитов за счет замены некоторых символов псевдографики. Очевидно, что замену символов во второй половине кодовой таблицы можно произвести разными способами. Для русского языка появились несколько разных таблиц кодировки символов кириллицы: КОИ8-R, IBM-866, CP-1251(ANSI), ISO-8551-5. Все они одинаково изображают символы первой половины таблицы (от 0 до 127) и различаются порядком представления символов русского алфавита и псевдографики.
Пример
Код букв «Б» и «б» в кодовой таблице ANSI - 193 и 225 соответственно; в таблице КОИ8-R – 226 и 194 соответственно; в таблице ISO 8859-5 – 177 и 209 соответственно.
Для таких же языков, как китайский или японский, 256 символов вообще недостаточно. Кроме того, всегда существует проблема вывода или сохранения в одном файле одновременно текстов на разных языках (например, при цитировании). Поэтому была разработана универсальная кодовая таблица UNICODE, содержащая символы, применяемые в языках всех народов мира, а также все известные служебные и вспомогательные символы (знаки препинания, математические и технические символы, стрелки, обозначения химических элементов и т.д.). Очевидно, что одного байта недостаточно для кодирования такого большого множества символов. Поэтому в UNICODE используются 16-битовые коды (1 символ – 2 байта), что позволяет представить 65536 символов. К настоящему времени задействовано около 49000 кодов. Для совместимости с предыдущими кодировками первые 256 кодов совпадают со стандартом ASCII.
Отметим еще раз, что и ASCII и UNICODE и другие стандартные кодировки символов не определяют изображения символов, а только состав символов и способ их двоичного представления в компьютере.
Когда пользователь может столкнуться с разными таблицами кодировки текстов?
Исторически сложилось так, что разные программы используют разные таблицы кодировки. Текст, набранный в текстовых редакторах Блокнот, Лексикон, Word автоматически будет сохраняться в тех таблицах кодировки, которые установлены для них по умолчанию. И документ, созданный в одном редакторе и открытый в другом, может иметь совершенно разные символы.
Пример
Текст «Урок прошел хорошо!», созданный в Блокноте и сохранённый в кодировке ANSI, на экране в Word может иметь вид: «сПНИЙ ОПНЬЕК УНПНЬН!»
Чтобы написанное в среде одного редактора прочитать в другом необходимо преобразовать (конвертировать) текст из одного формата в другой. Процесс такого преобразования называется конвертированием, а соответствующие программы – конверторами.
Все современные текстовые процессоры имеют встроенные программы-конверторы. И если программа-конвертор активизирована, то при открытии документов она сама подберет наиболее подходящую таблицу кодировки.
С проблемой конвертирования часто сталкиваются пользователи электронной почты и Интернет. Поэтому в состав всех почтовых программ и программ-навигаторов в сети также входит программа-конвертор.
Пример
В Internet Explorer перейти на другую таблицу кодировки можно в меню Вид / Кодировка.
Компьютер выполняет любые действия формально по заранее заданной программе. Передачу и обработку текста он тоже выполняет строго по установленным правилам. Правда, благодаря усилиям программистов, эти правила становятся всё более гибкими. Так, современные текстовые процессоры можно настроить таким образом, чтобы они автоматически исправляли некоторые ошибки при вводе текста. Например, если дважды подряд введено одно и то же слово или текст на русском языке набирается по ошибке с клавиатуры в режиме латинских букв. Тем самым при кодировании текстов реализуются некоторые интеллектуальные операции, присущие человеку.
Человека, в отличии от компьютера, отличает значительная гибкость при кодировании/декодировании текстов.
Пример
Прочитайте быстро следующий текст.
«По рзелульаттам илссеовадний одонго анлигйсокго унвиертисета, не иеемт занчнеия, в кокам пряокде рсапожолены бкувы в солве. Галвоне, чотбы преавя и пслоендяя бквуы блыи на мсете. Осатьлыне бкувы мгоут селдовтаь в плоонм бсепордяке, все рвано ткест чтаитсея без побрелм. Пичрионй эгото ялвятеся то, что мы не чиатем кдаужю бкуву по отдльенотси,а все солво цликеом.»
То, что Вы «декодировали» достаточно быстро, компьютеру пока не по силам.
ЗНАТЬ
Таблицы кодировки символов (кодовые страницы) - таблицы соответствия между символами определенного языка и двоичными (числовыми) кодами символов.
Первой и наиболее распространенной таблицей кодировки символов для персональных компьютеров стал Американский стандартный код для обмена информацией (American Standart Code for Information Interchange) – ASCII. Это 8-битный код: 1 символ кодируется 1 байтом.
Первые 128 символов (с 0 по 127) этой таблицы используются во всех других таблицах кодировки.
Для кодирования текстов на русском языке разработано несколько 8-битных таблиц кодировки: КОИ8, IBM-866, CP-1251, ISO-8551-5.
Если текст при сохранении кодируется в одной таблице кодировки, а при открытии используется другая таблица, то прочитать его будет затруднительно – потребуется конвертирование.
Конвертирование – процесс преобразования из одного формата данных в другой.
Получает все большее распространение таблица, в которой представлены алфавиты всех известных языков и все знаки, которые могут потребоваться при написании текстов – UNICODE. Кодирование в ней 16-битное: 1 символ представлен двумя байтами.
УМЕТЬ
Откройте текстовый редактор Блокнот. Откройте в нём какой-нибудь документ, созданный в текстовом редакторе Word. Проанализируйте, что будет на экране с позиций особенностей кодирования текстов.
Напишите в Блокноте одну – две фразы и сохраните документ в файле. Откройте этот файл в Word (предварительно в меню Сервис/Параметры/Общие отмените «подтверждать преобразование при открытии»). В появившемся диалоговом окне просмотрите, какие таблицы кодировки вам доступны и как выглядит созданный в Блокноте текст в разных кодировках.
(Задание рассчитано на то, что используется операционная система Windows’98 и выше).
В 4-х байтах памяти хранятся данные:
11110101 11110010 11101111 11101011
Определить, к какому виду они будут преобразованы для вывода на экран дисплея в соответствии с таблицами КОИ-8 и СР1251.
Закодируйте с помощью одной из таблиц кодировок текст «Информатика».
Сколько байт памяти будет отведено для хранения текста «Россия – наша родина!», если текст закодировать в таблице КОИ-8 и в таблице UNICODE?
Сколько должно быть страниц в книге, чтобы представить все 65536 символов таблицы UNICODE, если на одной странице умещается 60 строк?
6