Я пытаюсь понять строковую кодировку проприетарного формата файла (fp7
формат файла из Filemaker Pro ).
- Я обнаружил, что каждый символобфусцирован
XOR
с 0b01011010
и что длина строки кодируется с использованием одного начального байта (максимальная длина строки в Filemaker составляет 100 символов). - Кодировка - это переменная байтовая кодировка, где по умолчанию ISO 8859-1 (западный) используется для кодирования большинства символов.
- Если необходимо кодировать символ Unicode вне ISO 8859-1, в строку включается некий вид
control characters
, который изменяет декодирование следующегоили несколько следующих символов.Эти управляющие символы используют пространство символов управления ASCII (в частности, от 0x01
до 0x1f
).Это то, где я застрял, так как я не могу найти образец того, как работают эти управляющие символы.
Некоторые примеры того, что я нашел:
- При обнаружении управляющего символа
0x11
следующие символы создаются путем добавления 0x40
к значению байта, например, символ Ā
(Unicode \U0100
) кодируется как 0x11 0xC0
(0xC0
+ * 1028).* = 0x100
). - При обнаружении управляющего символа
0x10
предыдущий управляющий символ, похоже, сбрасывается. - При обнаружении управляющего символа
0x03
следующий (только следующий!) символ создается путем добавления 0x100
к значению байта.Если управляющему символу 0x03
предшествует 0x1b
, то все последующие символы создаются путем добавления 0x100
.
Пример строки (0_ĀĐĠİŀŐŠŰƀƐƠưǀǐǠǰȀ
), ее кодовых точек Юникода и кодировкив Filemaker:
char 0 _ Ā Đ Ġ İ ŀ Ő Š Ű ƀ Ɛ Ơ ư ǀ ǐ Ǡ ǰ Ȁ
unicode 30 5f 100 110 120 130 140 150 160 170 180 190 1a0 1b0 1c0 1d0 1e0 1f0 200
encoded 30 5f 11 c0 d0 e0 f0 3 40 3 50 3 60 3 70 1b 3 80 90 a0 b0 c0 d0 e0 f0 1c 4 80
Как видите, символы 0
и _
кодируются с использованием их прямого значения Unicode / ASCII.Символы ĀĐĠİ
кодируются с помощью управляющего байта 0x11
.Затем ŀŐŠŰ
кодируются с использованием 0x03
для каждого символа, затем 0x1B 0x03
используются для кодирования следующих 8 символов и т. Д.
Эта схема кодирования выглядит кому-нибудь знакомой?
Правила просты для персонажей размером до 0x200, но затем становятся все более и более запутанными, вплоть до того, что они кажутся зависимыми от позиции.
Я могу привести больше примеров для выходных головоломоки радость.