© М.Е. Крекин, 1999, 2002
Глава 3 Кодирование текста
В этой главе мы повторим, как в компьютерах кодируется текст.
Вы уже знаете, как можно кодировать числа. Не возникает никаких проблем и при кодировании любой другой информации, представимой с помощью ограниченного набора символов -- алфавита. Для этого достаточно пронумеровать все знаки этого алфавита и затем записывать в память компьютера (и, естественно, обрабатывать) соответствующие номера.
При кодировании текста для каждого его символа отводится, обычно, по 1 байту. Это позволяет использовать 28=256 различных символов. Соответствие между символом и его кодом, вообще говоря, может быть выбрано совершенно произвольно. Однако на практике необходимо иметь возможность прочесть на одном компьютере текст, созданный на другом. Поэтому таблицы кодировок стараются стандартизовать. Практически все использующиеся сейчас таблицы основаны на "американском стандартном коде обмена информацией" ASCII5. Этот стандарт определяет значения для нижней половины кодовой таблицы -- первых 127 кодов (32 управляющих кода, основные знаки препинания и арифметические символы, цифры и латинские буквы). В результате, эти символы отображаются верно, какая бы кодировка не использовалась на конкретном компьютере. Хуже обстоит дело с "национальными" символами и "типографскими" знаками препинания. А особенно не повезло языкам, использующим кириллический алфавит (русскому, украинскому, белорусскому, болгарскому и т.д.). Например, для русского языка сейчас широко используются пять таблиц кодировок:
- CP866 (DOS-альтернативная)6 -- на PC-совместимых компьютерах при работе с операционными системами DOS и OS/2, а также в любительской международной сети Фидо (Fidonet).
- CP1251 (Windows-кодировка) -- на PC-совместимых при работе под Windows 3.1 и Windows 95
- KOI-8r -- самая старая из использующихся до сих пор кодировок. Применяется на компьютерах, работающих под UNIX, является фактическим стандартом для русских текстов в сети Internet.
- Macintosh Cyrillic -- как видно из названия, предназначена для работы со всеми кириллическими языками на Макинтошах7.
- ISO-8859. Эта кодировка задумывалась как международный стандарт для кириллических текстов, однако на территории России встречается редко.
На самом деле, проблема не столь уж велика. Если мы знаем, как представлен исходный текст и какая таблица используется нашим компьютером, преобразование выполнить очень легко -- нужно просто поменять одни коды на другие (по таблице перекодировки). Для этого служат специальные программы -- текстовые конверторы. В последнее время появляются конверторы, способные самостоятельно определять исходную кодировку текста и даже умеющие "расшифровывать" текст после нескольких неправильных перекодировок.
Шестнадцатеричные коды некоторых букв
| KOI-8r | Win | Alt | Mac | ISO | Unicode |
А | E1 | C0 | 80 | 80 | B0 | 0410 |
Б | E2 | C1 | 81 | 81 | B1 | 0411 |
В | F7 | C2 | 82 | 82 | B2 | 0412 |
а | C1 | E0 | A0 | E0 | D0 | 0430 |
б | C2 | E1 | A1 | E1 | D1 | 0431 |
в | D7 | E2 | A2 | E2 | D2 | 0432 |
Заметим, кстати, что существуют и специальные шрифты (так называемые, дингбатсы), которые содержат не буквы, а специальные символы, например, математические или музыкальные; элементы орнаментов, пиктограммы .
Сейчас, когда объем памяти компьютеров чрезвычайно вырос, уже нет нужды очень сильно экономить при кодировании текста. Можно позволить себе "роскошь" тратить для хранения текста заметно больше памяти, выделяя для каждого символа не 1, а 2 (или даже 4) байта). При этом появляется возможность разместить в кодовой таблице -- каждый на своем месте -- не только буквы европейских алфавитов (латинского, кириллического, греческого), но и буквы арабского, грузинского и многих других языков и даже большую часть японских и китайских иероглифов. Ведь два байта могут хранить уже число от 0 до 65535, а четыре -- до 232
Международная кодировка Unicode, разработанная несколько лет назад, теперь начинает внедряться на практике. Вообще, unicode-таблица -- четырехбайтовая, но сейчас чаще используются особые способы дополнительного кодирования -- UTF-8 и UTF-16, где длина кода зависит от распространенности символа. Русские буквы и в том и в другом случае представляются двумя байтами (а вот латинские в UTF-8 -- всего одним).
Контрольные вопросы
- Каким образом кодируется на компьютере текст?
- Вы открываете текстовый файл, и видите на экране бессмысленный набор символов. С чем это может быть связано? Какие действия нужно предпринять, чтобы прочесть текст?
- В чем преимущества и недостатки кодировки Unicode?
Примечания
- ASCII -- American Standard Code for Information Interchange
- Точнее, альтернативная модифицированная. Такое название сохранилось с тех времен, когда кроме нее были еще "основная кодировка ГОСТ" и "альтернативная кодировка ГОСТ"
- Удивительно, но факт: при разработке этой кодировки не учли одну букву украинского алфавита. Поэтому украинский -- единственный кириллический язык, для которого на Макинтошах есть своя отдельная кодировка -- Macintosh Ukrainian
|