3.1 Стандарты кодирования символов ASCII, ANSI, КОИ-8 и UNICODE.
Представление символов в электронных изданиях базируется на таблицах кодов, в которых каждому из отображаемых на экране символов соответствует код от 0 до 255. Первые 127 кодовых комбинаций используются для латинских букв и цифр, знаков пунктуации и т. д., и, как правило, строятся по единому принципу.
Стандарт представления символов ASCII представляет собой 7-битное описание кода символа. Поскольку в персональных компьютерах используются байты, состоящие из 8 битов, то производители компьютеров часто определяют наборы символов, использующие 256 кодов вместо 128 кодов ASCII. В результате получается “расширенный набор символов” (extended character set), который включает в себя набор символов ASCII и до 128 других символов.
В начале 80-х годов производители IBM PC решили расширить набор символов ASCII так, как показано на рис. 1. Коды от 20h до 7Åh – это выводимые на дисплей символы из набора символов ASCII. Оставшиеся символы являются нестандартными или, по крайней мере, на тот момент являлись нестандартными.
Этот набор символов закодирован в миллионах микросхем ПЗУ в видеоадаптерах, принтерах и микросхемах BIOS. Он был растиражирован в аппаратуре многочисленных производителей IBM-ñîâìåñòèìûõ компьютеров и периферии. Для множества программ, работающих в текстовом режиме и написанных не для MS Windows, требует>ся этот расширенный набор символов, поскольку в них для вывода информации на экран используются символы псевдографики – символы блоков и линий (коды от В0h до D0h).
Рис. 1 Расширенный набор символов IBM. (Упорядочен по возрастанию значений кода символов).
Известно несколько вариантов кодирования символов IBM, которые называются «кодовые страницы» (code pages). Вариант, используемый в Соединенных Штатах Америки и большинстве европейских стран, называется Code Page 437. В системах, используемых в Норвегии, Дании, Португалии и некоторых других странах Европы, используются другие специальные кодовые страницы, в которых содержится большее количество специальных символов, необходимых для языков этих стран. В последнее время некоторые из этих стран начали использовать кодовую страницу Code Page 850, в которой содержится меньшее количество псевдографических символов. За этот счет добавлены дополнительные символы, знаки ударения и других специальных символов.
Расширенный набор символов, который Windows и программы для Windows в большинстве случаев используют, называется “набор символов ANSI” (ANSI character set), и фактически он является международным стандартом ISO. Кодовая таблица стандарта ANSI представлена на рис. 2.
Рис. 2. Набор символов ANSI. (Упорядочен по возрастанию значения кода).
В нашей стране кодовые комбинации, начиная с 128 используются для кодирования символов кириллицы, математических символов и др. информации. Причем для каждой платформы используется свое расположение символов в кодовой таблице. Так известны кодировки Windows, Mac, DOS-OS/2, ISO (Dec) и КОИ-8. Поэтому приходится осуществлять перекодировки символов кириллицы электронных изданий в зависимости от используемой платформы.
Справедливости ради, следует отметить, что существуют «Основная кодировка ГОСТа», «Альтернативная кодировка ГОСТа» и кодировка КОИ-8. В последнем случае символы кириллицы имеют коды: А Я – 224 –254 (не в алфавитном порядке); а-я – 192-223 (не в алфавитном порядке).
По мнению специалистов «Альтернативные кодировки ГОСТа» используют под кодировки символов кириллицы позиции, где в кодировке IBM расположены относительно редко используемые символы национальных алфавитов, греческие буквы и некоторые математические символы.
На рис. 3 приведена таблица кодировки символов кириллицы для Альтернативной кодировки ГОСТа (Alt), Основной кодировки ГОСТа (Mai), Кодировки MIC и КОИ-8.
Рис. 3 Кодировки символов кириллицы
Стандарт кодировки символов UNICODE. Стандарт Unicode был предложен некоммерческой организацией Unicode Consortium, образованной в 1991 г. Для представления каждого символа в этом стандарте используются два байта: один байт для кодирования символа, другой для кодирования признака. Тем самым обеспечивается информационная совместимость данного способа кодирования со стандартом ASKII.
Двухбайтовое описание кодов символов позволяет закодировать очень большое число символов из различных письменностей. Так, в документах Unicode могут соседствовать русские, латинские, греческие буквы, китайские иероглифы и математические символы.
Кодовое пространство Unicode разделено на несколько областей. Область с кодами от 0000 до 007F содержит символы набора Latin 1 (младшие байты соответствуют кодировке ISO 8859-1). Далее идут области, в которых расположены знаки различных письменностей, а также знаки пунктуации и технические символы. Часть кодов зарезервирована для использования в будущем (29000). 6000 кодовых комбинаций оставлено программистам.
Символам кириллицы выделены коды в диапазоне от 0400 до 0451
Ниже приведена основополагающая таблица использования кодового пространства UNICOD (Табл. 1).
Таблица 1
Начало области |
Конец области |
Набор символов |
0000 |
007F |
Basic Latin |
0080 |
00FF |
Latin-1 Supplement |
0100 |
017F |
Latin Extended-A |
0180 |
024F |
Latin Extended-B |
0250 |
02AF |
IPA Extensions |
02B0 |
02FF |
Spacing Modifier Letters |
0300 |
036F |
Combining Diacritical Marks |
0370 |
03FF |
Greek |
0400 |
04FF |
Cyrillic |
0530 |
058F |
Armenian |
0590 |
05FF |
Hebrew |
0600 |
06FF |
Arabic |
0700 |
074F |
Syriac |
0780 |
07BF |
Thaana |
0900 |
097F |
Devanagari |
0980 |
09FF |
Bengali |
0A00 |
0A7F |
Gurmukhi |
0A80 |
0AFF |
Gujarati |
0B00 |
0B7F |
Oriya |
0B80 |
0BFF |
Tamil |
0C00 |
0C7F |
Telugu |
0C80 |
0CFF |
Kannada |
0D00 |
0D7F |
Malayalam |
0D80 |
0DFF |
Sinhala |
0E00 |
0E7F |
Thai |
0E80 |
0EFF |
Lao |
0F00 |
0FFF |
Tibetan |
1000 |
109F |
Myanmar |
10A0 |
10FF |
Georgian |
1100 |
11FF |
Hangul Jamo |
1200 |
137F |
Ethiopic |
13A0 |
13FF |
Cherokee |
1400 |
167F |
Unified Canadian Aboriginal Syllabics |
1680 |
169F |
Ogham |
16A0 |
16FF |
Runic |
1780 |
17FF |
Khmer |
1800 |
18AF |
Mongolian |
1E00 |
1EFF |
Latin Extended Additional |
1F00 |
1FFF |
Greek Extended |
2000 |
206F |
General Punctuation |
2070 |
209F |
Superscripts and Subscripts |
20A0 |
20CF |
Currency Symbols |
20D0 |
20FF |
Combining Marks for Symbols |
2100 |
214F |
Letterlike Symbols |
2150 |
218F |
Number Forms |
2190 |
21FF |
Arrows |
2200 |
22FF |
Mathematical Operators |
2300 |
23FF |
Miscellaneous Technical |
2400 |
243F |
Control Pictures |
2440 |
245F |
Optical Character Recognition |
2460 |
24FF |
Enclosed Alphanumerics |
2500 |
257F |
Box Drawing |
2580 |
259F |
Block Elements |
25A0 |
25FF |
Geometric Shapes |
2600 |
26FF |
Miscellaneous Symbols |
2700 |
27BF |
Dingbats |
2800 |
28FF |
Braille Patterns |
2E80 |
2EFF |
CJK Radicals Supplement |
2F00 |
2FDF |
Kangxi Radicals |
2FF0 |
2FFF |
Ideographic Description Characters |
3000 |
303F |
CJK Symbols and Punctuation |
3040 |
309F |
Hiragana |
30A0 |
30FF |
Katakana |
3100 |
312F |
Bopomofo |
3130 |
318F |
Hangul Compatibility Jamo |
3190 |
319F |
Kanbun |
31A0 |
31BF |
Bopomofo Extended |
3200 |
32FF |
Enclosed CJK Letters and Months |
3300 |
33FF |
CJK Compatibility |
3400 |
4DB5 |
CJK Unified Ideographs Extension A |
4E00 |
9FFF |
CJK Unified Ideographs |
A000 |
A48F |
Yi Syllables |
A490 |
A4CF |
Yi Radicals |
AC00 |
D7A3 |
Hangul Syllables |
D800 |
DB7F |
High Surrogates |
DB80 |
DBFF |
High Private Use Surrogates |
DC00 |
DFFF |
Low Surrogates |
E000 |
F8FF |
Private Use |
F900 |
FAFF |
CJK Compatibility Ideographs |
FB00 |
FB4F |
Alphabetic Presentation Forms |
FB50 |
FDFF |
Arabic Presentation Forms-A |
FE20 |
FE2F |
Combining Half Marks |
FE30 |
FE4F |
CJK Compatibility Forms |
FE50 |
FE6F |
Small Form Variants |
FE70 |
FEFE |
Arabic Presentation Forms-B |
FEFF |
FEFF |
Specials |
FF00 |
FFEF |
Halfwidth and Fullwidth Forms |
FFF0 |
FFFD |
Specials |
В документах Unicode используются различные шрифты. Как правило, файл шрифта Unicode содержит начертания не для всех символов, определенных в стандарте, а лишь для символов из некоторых областей.
Некоторые программы, например, ядро Windows NT, ее графический интерфейс (GDI) и файловая система (NTFS) реализованы с использованием Unicode. Программы, запущенные в среде NT, могут работать также с однобайтовыми символами, кодировка которых в этом случае соответствует установленной по умолчанию кодовой странице ANSI (для России – Windows Cyrillic).
Перед вызовом некоторых функций программного интерфейса NT программы, работающие с кодовой страницей ANSI, преобразуют однобайтовые символы в Unicode. Чтобы преобразование выполнялось без ошибок, обычно указывается страна в приложении Regional Settings. Такой же подход используется для корректной работы с национальными символами программ, в среде MS-DOS
В отличие от Windows NT, ядро и графический интерфейс Windows 95 не используют Unicode, а работают с кодовыми страницами. Однако в этой ОС предусмотрена возможность динамического изменения наборов символов и раскладок клавиатуры, что позволяет создавать документы, содержащие одновременно символы из разных наборов. Буфер обмена Windows 95 способен хранить тексты в формате CF_UNICODETEXT. В составе Windows 95и более поздних версий поставляется набор шрифтов Unicode, с которыми, в частности, могут работать программы Microsoft Office.
Выяснить, какие наборы символов присутствуют в том или ином шрифте Unicode, можно с помощью стандартной утилиты Character Map (таблица символов), включенной в состав Windows NT . Выбрав в списке Subset строку Cyrillic, вы увидите таблицу с символами кириллицы, соответствующую кириллической области Unicode.
Использование Unicode значительно упрощает создание многоязычных документов, публикаций и программных приложений. Поэтому следует ожидать его широкого использования в электронных изданиях.