Значение ошибочного фрагмента кода RTF

Я работаю над файлом RTF, созданным кем-то другим на неизвестной платформе, и все интерпретируется правильно, за исключением некоторых символов, независимо от набора символов, из которого я их открываю в openoffice. Вот простой текст после интерпретации:

"Mimeme tail la Terre, MEME MASSE, MEME âgec Vénus - сувенир, посвященный творчеству Терре".

и вот оригинальный параграф ANSI:

"M \ u234 \ '3fme taille que la Terre, m \ u234 \' 3fme masse, m \ u234 \ '3fme \'3fge\uc2 \u61825\'ff\'81\uc1 c V\u233\'3fnus" сувенир 3 фута 333 качества 3fe де ла Терре ".

Чтобы увеличить:

"âgec Vénus" становится "uf6\ 3fge \ uc2 \ u61825 \ ff \ '81 \ uc1 c V \ u233 \ '3fnus"

и наконец, что мы придумали:

"\ uc2 \ u61825 \ 'ff \ '81 \ uc1 c"

Вот \uc2 а также \uc1 надо сказать, что мы идем туда-сюда между 4-байтовой и 2-байтовой кодировкой Unicode.

\u61825 является неизвестным символом Unicode. Действительно, согласно спецификации RTF, любой символ UTF больше 2^15 должен быть записан в отрицательной форме; Отрицательная форма с символами ANSI должна сделать знак "-" (минус) видимым в блокноте, я прав? Так что здесь у меня уже есть кое-что, что я не понимаю, как автор RTF, использованный человеком, который первым создал файл rtf, мог это сделать. Может быть, я что-то упустил в спецификации, конкретных версиях, наборах символов, я не знаю. Если принять как есть, 61825 будет соответствовать F181, который находится в частной области таблицы Unicode.

И тогда \'ff\'81 было бы какое-то использование эквивалентного поля ANSI всей группы "конкретного символа" (структура которого обычно \uN\'XX), чтобы закодировать что-то длиной 4 байта. И вот опять я не смог найти

  • на какую кодовую страницу (Windows-1252, ISO-8859-1, другое?) ссылаются (как и во всех других местах файла, где \uN\'XX последовательность действий, XX всегда 3F, код Windows-1252 для "?", поэтому он не дал мне много информации)

  • что это \'FF (который выглядит как некоторый управляющий символ внутри escape-последовательности!) означает, а затем почему \'81... собственно, перевод \u61825 шестнадцатеричный F181не FF81... Я здесь потерян!

Наконец, то, что переведенный текст (на французском) заставит нас ожидать, это ":" (точка с запятой): "Тот же размер, что и Земля, та же масса, тот же возраст: Венера часто квалифицируется как сестра Земли". Это имело бы смысл. Но какой автор rtf мог представить такой сложный код для точки с запятой?

Итак, еще раз, после 1 часа поиска, я открываю вопрос для вас, ребята: кто-то распознает это и может сказать мне, какое кодирование контрольных слов используется, есть ли здесь большой беспорядок дополнения endian/little endian/2 с 61825, и то же самое с \'ff\'81, который будет собираться как FF81 вместо F181, что само по себе ничего не значит как есть... здесь мой вопрос состоит только в том, чтобы узнать, можно ли найти полный исходный текст обратно из странной RTF-кодировки!

1 ответ

Решение

что переведенный текст (на французском) заставит нас ожидать, это ":" (точка с запятой)

Почти: это должен быть многоточие. Вы можете увидеть исходный текст, например, здесь.

Многоточие, как правило, должно быть записано просто как три периода, но традиционно был отдельный символ, представляющий многоточие, чтобы лучше контролировать их интервал, еще до того, как существовали сложные алгоритмы размещения текста, которые могли бы выполнять автоматическую замену глифа. Следовательно, существует символ совместимости Unicode U+2026 ГОРИЗОНТАЛЬНЫЙ ЭЛЛИПСИС, позволяющий выполнить циклическое переключение к устаревшим кодировкам, таким как кодовая страница Windows 1252, где это байт 133.

Это, однако, не то, что было закодировано в вашем документе RTF. Это было бы слишком просто.

61825 - неизвестный символ Юникода.

Это персонаж из области личного пользования, что означает, что он может представлять абсолютно все. Word экспортировал определенные шрифты общих символов в качестве символов PUA - см. Этот пост в качестве фона.

Таким образом, кто-то в какой-то момент мог использовать символьный шрифт, где кодовая единица 129 (0x81 в U+F181, 61825) отображается на что-то похожее на многоточие. Что это за шрифт, я понятия не имею! Кажется, это не один из обычных подозреваемых (Символ, Wingdings, Webdings). Возможно, вам придется просто вручную заменить U + F181 на U+2026, если вы не можете узнать больше об источнике.

Другие вопросы по тегам