[oodisc] OO-2.0.2, FreeBSD 6.1-RC: сохранение нового файла в RTF с неверной кодировкой

Boris Samorodov bsam на ipt.ru
Ср Апр 19 23:48:17 MSD 2006


On Wed, 19 Apr 2006 19:22:10 +0400 Alexej Kryukov wrote:
> On Wednesday 19 April 2006 15:46, Dmitry Agafonov wrote:
> >
> > ВЫВОД:
> > Сломано сохранение при локали koi8-r.
> > Пишите жалобу.

> Вывод, на самом деле, неправильный, в чем можно убедиться, посмотрев
> созданные RTF в текстовом редакторе. Проблема вовсе не только с
> KOI8, а с концепцией поддержки различных кодировок в RTF в целом.

> Логика поведения RTF-фильтра (ранее специфичного для BSD, а теперь
> обнаруженного и на Линуксе) состоит в следующем: нелатинские символы
> всегда записываются в локальной кодировке. Этим лечится застарелая
> болезнь того же фильтра, который в непропатченном виде генерировал 
> чисто юникодовые RTF, открывавшиеся потом в виде вопросиков
> в таких приложениях, как PageMaker или Word 95. Но очевидно, что
> лекарство хуже самой болезни, т. к. в RTF может использоваться вовсе не
> любая кодировка, а только кодировки от MS, так что для кирилллицы
> единственно допустимым вариантом была бы cp1251. Неудивительно, что
> потом файлы, созданные в локали koi8 (а также iso8859-5) некорректно
> открываются самим же OOo: входной-то фильтр не пропатчен, и ведет
> себя, независимо от текущей локали, совершенно правильно.

> Ну а при локали UTF-8 генерируется юникодовый RTF (почти такой же,
> какой был бы и без патча), который сам по себе тоже был бы относительно
> корректным, если бы не то обстоятельство, что для 8-битных приложений
> туда вместо корректных ANSI-эквивалентов (или хотя бы знаков вопроса)
> записываются пары-тройки-четверки символов: коды UTF-8, воспринятой
> как cp1251. Так что сам OOo такой файл читает, а вот если открыть его
> в том же Word 95, то можно сильно удивиться.

Алексей, спасибо за развёрнутый анализ.

Однако, у меня остаётся вопрос (возможно, ответ на него покажет то
узкое место, которое надо расширить): почему тогда есть возможность
сначала сохранив пустой файл в формате RTF, закрыв и открыв его снова,
cовершенно спокойно работать в своей родной кодировке (у меня koi8-r)?
Может, стоит применить получившиеся таким образом условия (после
открытия файла) на условия сохранения нового файла? Ведь по сути
ничего нового в ОС, локали, окружении не возникает.

Кстати, этот workaround у кого-нибудь повторяется?

> Разумеется, здесь возникает вопрос, зачем было включать в линуксовую
> сборку патч, некорректность которого уже была обсуждена применительно 
> к BSD.

Честно говоря, не знаю, BSD-шный ли патч был применён или нечто
другое, но поведение OO очень похоже. Тот патч, от которого
отказались во FreeBSD ещё в начале 2004 года, касался работы CJK-rtf
(насколько я понимаю, это Китай-Япония-Корея), но влиял на работу с
koi8-r.


WBR
-- 
bsam


Подробная информация о списке рассылки Oo-discuss