Национальные алфавиты и таблицы кодировок
В каждой стране используется свой алфавит - набор символов (немецкий, французский, испанский,
русский). Для их представления обычно используются "Таблицы Кодировок", содержащие коды от
нуля до двухсот пятидесяти пяти. Однако в некоторых случаях одного байта не хватает для
представления всех символов алфавита (китайский, японский, корейский). PROGRESS
предоставляет возможность работы как с однобайтовыми и двубайтовыми таблицами
кодировок.
В России известно несколько Таблиц Кодировок альтернативная, основная, дополнительная. В
операционных системах DOS, MS-WINDOWS, UNIX также используются различные Таблицы
Кодировок. Рассмотрим как в Progress осуществляется описание, настройка и динамическое
преобразование Таблиц Кодировок для различных операционных систем и оборудования.
Описанный ниже алгоритм позволяет освободить разработчика от задач, связанных с
локализацией продуктов и настройкой их на работу в конкретном операционном окружении, что
значительно облегчает его работу и экономит время, необходимое на разработку и сопровождение
программного продукта.
Вся информация необходимая для настройки Таблиц Кодировок, в PROGRESS они называются
кодовыми страницами, содержится в файле convmap.cp. Этот файл хранится во внутреннем
формате PROGRESS, и создается специальной утилитой из обычного текстового файла
convmap.dat.
В данном файле хранится несколько специальных таблиц, двух типов - определения кодовых
страниц и правил сортировки.
- Для каждой кодовой страницы определяется таблица букв - ISALPHA, в которой указывается
является ли символ буквой или нет (знак пунктуации, цифра и т.д.). Progress использует эту
таблицу для проверки символов при вводе с определением формата. Таблица ISALPHA состоит из
256 полей, пронумерованных от 0 до 255. Каждое поле соответствует одному символу кодовой
таблицы. Если символ является буквой, то в соответствующем ему поле стоит значение 001. В
противном случае значение поля равняется 000.
Для каждого символа от 0 до 255, является ли он буквой или нет.
В случае, если символ является
буквой, в таблице 1 на соответствующему ему месте стоит код 001. В противном случае - 000. Тип
таблицы указывает используется ли данная таблица для однобайтовой кодировки или нет.
Значение TYPE 1 указывает, что данная таблица используется для однобайтовых кодировок.
====
CodePAGE
CODEPAGE-NAME "NEW1"
TYPE "1"
ISALPHA
/*000-015*/ 000 000 000 000 000 000 000 000 000 000 000 000 000 000
000 000
/*016-031*/ 000 000 000 000 000 000 000 000 000 000 000 000 000 000
000 000
.
.
/*128-143*/ 001 001 001 001 001 001 001 001 001 001 001 001 001 001
001 001
.
.
/*240-255*/ 000 000 000 000 000 000 000 000 000 000 000 000 000 000
000 000
ENDTABLE
ENDCODEPAGE
- Следующие две таблицы - UPPERCASE-MAP и LOWERCASE-MAP, определяют правила
преобразования прописных букв в заглавные и наоборот. Для каждой кодовой страницы
возможно задание нескольких пар таких таблиц. Как правило, используется пара под названием
BASIC. Эти таблицы используются как при вводе информации, так и при выполнении операторов
LowerCase, CAPS и др.
- Таблица преобразований кодовых страниц - CONVERT. Эти таблицы определяют правила
перекодировок между двумя различными кодовыми таблицами. Таких таблиц может быть
несколько, но обязательно должна существовать по крайней мере одна из них.
- Для задания правил сортировки используется две таблицы CASE-SENSITIVE-SORT и CASE-
INSENSITIVE-SORT. В первом случае вначале идут все заглавные буквы, а затем все прописные.
Во втором случае порядок следования символов будет следующим "A", "a", "Б", "б" и т.д.
После определения все этих таблиц необходимо запустить утилиту преобразования получившегося
файла (convmap.dat) во внутренний формат Progress (convmap.cp).
Proutil -C codepage-compiler ....\convmap.dat ....\convmap.cp
После выполнения всех этих действий Вы уже можете использовать подготовленную Вами
кодовую страницу. Для этого в стартовом файле необходимо указать значение параметра -
convmap.