Главная

 

Формат *.cp файлов.


Разобраться с форматом файла *.cp достаточно просто. Необходимо хотя-бы отдаленно понимать что такое кодировка, код символа, ansi-код, юникод.

Собственно формат *.cp файлов (файлов с кодировками) такой:
Name=Name Coding

[Table]

ANSI-code = unicode-code ; alt ANSI-code

ANSI-code = unicode-code ; alt ANSI-code

...

ANSI-code = unicode-code ; alt ANSI-code

 

где

Name Coding - Имя кодировки, которое будет показывать SPrint в своем списке;

[Table] - Признак того, что все следуемое после этой строки и есть, фактически, таблица перекодировки символов;
ANSI-code - Код ANSI Символа;

Unicode-code - Код символа в unicode;

alt ANSI-code - Необязательный альтернативный ANSI-код.

В таблице должно быть столько строк, сколько символов необходимо перекодировать.
Как правило, необходимости заполнять все 256 символов нет, так как почти во всех кодировках символы 0 - 127 одинаковые.
Поэтому в случае, если искомый символ в таблице перекодировки не будет найден, то он будет перекодирован "один-в-один".
Однако если это не так то ничто не мешает заполнить в таблице все 256 символов или только те символы из верхней половины таблицы, которые в данной кодировке имеют отличный код. Впрочем, управляющие символы до 32 кода (20H) все-же менять не рекомендую (перевод строки, табуляция, пробел), так как в этом случае корректная работа программы не гарантируется.

Так как в ANSI-кодировке 1 символ представлен 1 байтом, а в unicode - 2-мя байтами, то соответственно и таблице перекодировки нужно указывать в качестве кодов символов соответственно однобайтовый и двухбайтовый.
Все числа (коды) указываются только в шестнадцатеричной системе исчисления.

Отдельно рассмотрим что такое "alt ANSI-code".
Это не обязательный альтернативный код ANSI символа для случая перекодировки без использования unicode.
В программе есть опция "Перекодировать в unicode". И все вышесказанное относилось именно для случая, когда эта опция включена.
Если-же она не включена, то при перекодировке файла из исходной кодировки (например 866 DOS) в кодировку Windows (например 1251), перекодирование идет по схеме один байт - на один байт.
Казалось-бы, что для этого случая нужно указать символ с каким кодом нужно подставлять вместо оригинального.
Почему-же тогда этот код необязательный ? Потому-что система сама может перекодировать двухбайтовый символ в однобайтовый.
Но делает это она часто не очень удачно, особенно в части псевдографики. Скорее всего многие наблюдали в различных редакторах псевдографику, представленную приблизительно следующим образом:

г=====T======T=====¬
¦     ¦      ¦     ¦
¦=====+======+=====¦
¦     ¦      ¦     ¦
¦-----+------+-----¦
¦     ¦      ¦     ¦
L=====¦======¦=====-


Не знаю как кому, но мне не совсем нравится замена символов псевдографики похожими символами из обычного алфавита. Смотрится не очень...
Поэтому решено было именно для псевдографики сделать альтернативную перекодировку, хотя, если вас не смущает вышеприведенная табличка, то этого можно и не делать. Сейчас это сделано только для кодировок
DOS 866 (Cyrillic), RUSCII (CP-1125 или 866u). Поэтому для данных кодировок в результате перекодировки без unicode табличка будет выглядеть примерно так.

====================
|     |      |     |
|=====|======|=====|
|     |      |     |
|-----|------|-----|
|     |      |     |
====================

Все коды (числа) в cp-файле должны быть в шестнадцатеричной (hex) системе исчисления.
Файлы с кодировками должны находится в подкаталоге CP каталога размещения программы SPrint.

Вот, пожалуй, все.