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

Для кодирования букв и других символов, используемых в печатных документах, необходимо закрепить за каждым символом числовой номер – код.

В англоязычных странах используются 26 прописных и 26 строчных букв (A … Z, a … z), 9 знаков препинания (. , : ! " ; ? ( ) ), пробел, 10 цифр, 5 знаков арифметических действий (+,-,*, /, ^) и специальные символы (№, %, _, #, $, &, >, <, |, \) – всего чуть больше 100 символов. Таким образом, для кодирования этих символов можно ограничиться максимальным 7-разрядным двоичным числом (от 0 до 1111111, в десятичной системе счисления – от 0 до 127).

Первой такой 7-разрядной кодовой таблицей была ASCII (American Standard Code for Information Interchange), опубликованная как стандарт в 1963 г. американской организацией по стандартизации American Standards Association (ASA), которая позднее стала именоваться ANSI (American National Standards Institute, http://www.ansi.org/, поэтому данную кодовую таблицу называют также и ANSI). Таблица содержала 32 кода команд или управляющих символов (от 0 до 31), большая часть которых сегодня не используется, и 95 кодов (от 33 до 127) для различных знаков, достаточных для работы с английскими текстами, как показано на рисунке 1.1. На рисунке 1.1 символы построчно имеют следующие коды в шестнадцатеричной системе счисления (в скобках – в десятичной):

  • 1-я строка с 00 по F и далее с 10 по 1F (0 – 15, 16 - 31),
  • 2-я строка с 20 по 2F и 30 – 3F (32 – 47, 48 - 63),
  • 3-я строка с 40 по 4F и 50 – 5F (64 – 79, 80 -95),
  • 4-я строка с 60 по 6F и 70 – 7F (96 – 111, 112 -127).


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

  • ISO/IEC 646:1991 (ISO – http://www.iso.org/ – International Organization for Standardization и IEC – http://www.iec.ch/ – International Electrotechnical Commission – ведущие международные организации по стандартизации, в области электротехники – совместные стандарты),
  • ITU-T Recommendation T.50 (09/92) (The International Telecommunication Union – http://www.itu.int/),
  • ECMA-6 (European Computer Manufacturers Association).

Однако для нашей страны и многих других стран необходимо было добавить в кодовую таблицу символы национальных алфавитов. Для этого было предложено использовать 8-битную кодовую таблицу, которая могла содержать дополнительно ещё 128 символов (с 128 по 255).

В дальнейшем был принят стандарт на 8-битную таблицу ASCII – ISO/IEC 8859, в которой первые 128 символов оставались те же, что и в 7-битной таблице, а символы с 128 по 255 отводились для неанглийских символов. Существует несколько частей этого стандарта:

  • ISO/IEC 8859-1:1998 -- Part 1:Latin alphabet No. 1,
  • ISO/IEC 8859-5:1999 -- Part 5: Latin/Cyrillic alphabet,
  • ISO/IEC 8859-6:1999 -- Part 6: Latin/Arabic alphabet,
  • ISO/IEC 8859-7:2003 -- Part 7: Latin/Greek alphabet,
  • ISO/IEC 8859-8:1999 -- Part 8: Latin/Hebrew alphabet и т.д.

На рисунке 1.2 представлена вторая половина кодовой таблицы (коды 128-255) для стандарта ISO 8859-5.
Рисунок 1.2. Кодовая таблица ISO 8859-5(коды с 12810 по 25510)
Первые русские ЭВМ использовали 7-битную кодировку символов КОИ-7 (Код Обмена Информацией семибитный – рисунок 1.3), в которой присутствовали прописные латинские буквы, а на месте строчных латинских были русские прописные буквы (кириллица).

Рисунок 1.3. Таблица символов КОИ-7
Позднее на первых отечественных персональных компьютерах использовалась так называемая «Основная кодировка ВЦ Академии Наук СССР», в руководствах к старым матричным принтерам обозначаемая просто как «ГОСТ» – 8-битная кодовая таблица, вторая половина которой содержала символы псевдографики, русские прописные и строчные буквы (коды с 128 по 255 – рисунок 1.4).
Рисунок 1.4. Кодировка символов «ГОСТ»
В дальнейшем основной кодировкой русских букв для MS DOS стала "альтернативная кодировка названая так ВЦ и разработаная в ИВНД Академии Наук СССР" (вторая половина таблицы для кодов 128-255 приведена на рисунке 1.5). Содержит псевдографику (позволяющую в текстовом режиме рисовать рамки из одинарных и двойных линий). Существует несколько модификаций, отличающихся символами в последних 14 позициях. Зарегистрирована в IANA (Internet Assigned Numbers Authority – организация, отвечающая за административное управление в Internet) как IBM866 или CP866.
Рисунок 1.5. Таблица символов DOS Cyrillic (CP866)
С широким распространением операционной системы Microsoft Windows и появлением её национальных локализаций для второй половины таблицы ASCII было введено понятие «кодовая страница» (code page, CP). Несколько наиболее важных кодировок показаны в таблице 1.1.

Таблица 1.1. Некоторые национальные кодовые страницы (CP) операционной системы Microsoft Windows

Локализация ANSI CP Mac CP DOS Primary CP(OEM) DOS Secondary CP(OEM) Другие CPs
English (United States) 1252 10000 437 850
English (Britain, Canada и др.) 1252 10000 850 437
French (Standard) 1252 10000 850 437
French (Canada) 1252 10000 850 863 437
German (Standard) 1252 10000 850 437
Russian 1251 10007 866 855

Кодировка русских букв в операционной системе Microsoft Windows – CP1251 – показана на рисунке 1.6.
Рисунок 1.6. Таблица символов CP1251
В операционной системе Linux для представления русских букв используется кодировка КОИ-8R (рисунок 1.7), зарегистрированная в IANA как KOI8-R (http://koi8.pp.ru/).
Рисунок 1.7. Таблица символов KOI8-R
Стандартизован зарегистрирован также украинский клон КОИ-8 – KOI8-U (рисунок 1.8), имеющая отличия от KOI8-R во второй строке символов псевдографики.
Рисунок 1.8. Таблица символов KOI8-U
Кириллица Macintosh (компьютеров фирмы Apple), она же CP10007, довольно близка к CP1251. Не зарегистрирована в IANA, но часто обозначается как x-mac-cyrillic (рисунок 1.9).
Рисунок 1.9. Macintosh Cyrillic, CP10007 (charset = x-mac-cyrillic)
В 1991 году в Калифорнии была создана некоммерческая организация Unicode Consortium, в которую входят представители многих компьютерных фирм (Borland, IBM, Lotus, Microsoft, Novell, Sun, WordPerfect и др.), и которая занимается развитием и внедрением стандарта «The Unicode Standard». Стандарт кодирования символов Unicode становится доминирующим в интернациональных программных многоязычных средах. Microsoft Windows NT и его потомки Windows 2000, 2003, XP используют Unicode, точнее UTF-16, как внутреннее представление текста. UNIX-подобные операционные системы типа Linux, BSD и Mac OS X приняли Unicode (UTF-8), как основное представления многоязычного текста. Unicode резервируют 1114112 (220+216) символов кода, в настоящее время используются более 96000 символов. Первые 256 кодов символов точно соответствуют таковым ISO 8859-1, наиболее популярной 8-разрядной таблицы символов «западного мира»; в результате, первые 128 символов также идентичны таблице ASCII. Кодовое пространство стандарта Unicode разделено на 17 планов («planes»), и каждый план имеет 65536 (= 216) точек кода. Первый план (план 0), Основной Многоязычный План (BMP - Basic Multilingual Plane) - тот, в котором описано большинство символов. BMP содержит символы почти для всех современных языков, и большое количество специальных символов. Ещё два плана используются для «графических» символов. План 1, Дополнительный Многоязычный План (SMP - Supplementary Multilingual Plane ) главным образом используется для исторических символов, а также используется для музыкальных и математических символов. План 2, Supplementary Ideographic Plane (SIP), используется для приблизительно 40000 редких Китайских иероглифов. План 15 и План 16 открыт для любого частного использования. На рисунке 1.10 показан русский блок Unicode (U+0400 to U+04FF).

Рисунок 1.10. Кириллица в Unicode
В то же время, подобно двоичным файлам, кодировка Unicode мало подходит для непосредственной передачи по сети – байты в тексте вполне могут приходиться на область управляющих символов, поэтому обычно применяются две другие основанные на Unicode кодировки переменной длины, обозначаемые как UTF (Unicode Transformation Format): 7-битная UTF-7 (последний пересмотр – RFC2152, 1997 г., зарегистрирована в IANA как UTF-7) и 8-битная UTF-8 (RFC2279, 1998 г., зарегистрирована в IANA как UTF-8). Обе они в каком-то смысле уже не являются языковыми кодировками, а являются программно распознаваемым кодом относительно исходного Unicode, но зарегистрированы они именно как кодировки, наравне с ISO 8859-5 или KOI8-R. Естественно, обе они не являются специфически «русскими», а пригодны для написания «сколько угодно»-язычного письма. В UTF-8 все символы разделены на несколько групп по значению первых битов. Символы с кодами менее 128dec кодируются одним байтом, первый битом которого равен нулю, а последующие 7 бит в точности соответствуют 128 символам 7-й таблицы ASCII (см. таблицу 1.2), следующие 1920 символов – двумя байтами (Greek, Cyrillic, Coptic, Armenian, Hebrew и Arabic символы). Последующие символы кодируются тремя и четырьмя байтами.
Таблица 1.2. Принцип кодирования символов в UTF-8

Диапазон UTF-8 Notes
кодов (binary)
(hexadecimal)
000000 - 00007F 0xxxxxxx Первый бит 0, следующие 7 соотверствуют таблице ASCII
000080 - 0007FF 110xxxxx 10xxxxxx Первые 3 бита 110 – всего используется 2 байта, второй байт начинается с 10
000800 - 00FFFF 1110xxxx 10xxxxxx 10xxxxxx Первые 4 бита 1110 – всего используется 3 байта, второй и третий байты начинаются с 10
010000 - 10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx Первые 5 бит 11110 – всего используется 4 байта, второй, третий и четвёртый байты начинаются с 10

Особняком стоит 7-битная, русская кодировка - транслитерация, или транскириллица, когда русские буквы передаются похожими по звучанию английскими primerno takim obrazom. В конце 1997 г. Microsoft подвергла ревизии свои кодовые таблицы и включила в них новый символ евровалюты "Евро", он помещен в позицию 128 (0x80) большинства таблиц и в позицию 136 (0x88) русской таблицы CP1251.

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

  • Cyrillic (Windows) – CP1251 – Microsoft Windows;
  • Cyrillic (DOS) – CP866 – MS-DOS (встречается крайне редко);
  • Cyrillic (ISO) – ISO 8859-5 – 8-ми битная таблица ASCII;
  • Cyrillic KOI8-R – используется среди ортодоксальных пользователей операционных систем Linux, по-прежнему не желающих переходить на unicode, и среди html-программистов "старой закалки";
  • CP10007 – Mac OS (в настоящее время -- переход на unicode);
  • UTF-8 – универсальная Unicode кодировка (используется в большинстве Linux и Windows 2008).

См. также

править

Ссылки

править