[oodisc] Кодировки русского в OO

Alexej Kryukov akrioukov на newmail.ru
Пн Мар 29 01:45:54 MSD 2004


On Monday 29 March 2004 00:19, Boris B. Samorodov wrote:
> Hi!
>
> > текста, ибо меня гложут смутные сомнения по поводу Вашей
> > клавиатуры, при помощи которой Вы вводите русский текст. Скажите,
> > Вы используете стандартную раскладку из поставки XFree86?
> > А взглянуть на секцию Keyboard из файлы XF86Config можно?
>
> Этого, наверное, будет достаточно:

Да, безусловно, вполне достаточно ;-)

> Одна и та же, бинарная установка английского OO-1.1.0. Вот начало
> файла instdb.ins:

Ладно, в общем, на данный момент мы имеем следующее. В файле times-1
русский текст представлен следующим образом: \u1055 ?\u1088 ?\u1080
?\u1074 ?\u1077 ?\u1090 ?, \u1084 ?\u1080 ?\u1088 ?! Собственно,
это и называется "юникодовый rtf". Такой код не совсем корректен
(ибо вместо вопросиков должны быть ANSI-эквиваленты), но тем не
менее правильно воспринимается любым юникодовым приложением.
Так вот, насколько мне известно, никакого другого rtf OOo генерировать
не умеет в принципе.

Теперь вот что у нас в файле hello-1:
\'f0\'d2\'c9\'d7\'c5\'d4, \'cd\'c9\'d2!

То есть, вместо юникодов почему-то записались 8-битные коды
кириллических символов, причем в Вашей локальной кодировке
(KOI8-R) -- а это, конечно, неправильно, ибо для rtf единственно
правильной кириллической кодировкой является windows-1251. 
Раньше подобным образом вел себя фильтр для формата Word 6.0/95,
но никак не RTF! Теоретически такое могло бы получиться также,
если бы Вы вводили с клавиатуры латиницу-1 под видом кириллицы,
пользуясь каким-либо древним драйвером типа xes (вот откуда
вопрос о конфигурации клавиатуры). 

Файл hello-2 отличается от предыдущего случая лишь тем, что 
кодировка там правильная (windows-1251), но всё равно остается
непонятным, почему записался 8-битный rtf вместо юникодового.

Теперь вопрос, в чем разница между Times New Roman и Times?
Очевидно, вот в чем:

\fcharset204 Times New Roman;
\fcharset0 Times;

То есть, OOo считает, что в шрифте Times нет русских символов
(а их там и вправду нет, ибо юникодовая версия этого шрифта у
Вас не установлена), и потому оставляет юникоды без перекодировки.
Проблема лишь в том, что официальной версии OOo такое поведение,
насколько мне известно, абсолютно не свойственно.

Таким образом, я могу лишь предположить, что при сборке из портов
на фильтр rtf налагается некий патч, который и ответствен за 
такое поведение. Любопытно было бы это проверить. В любом случае,
если поведение фильтра rtf на Вашей системе таково, как я описал,
то, очевидно, наиболее простое решение заключалось бы в том,
чтобы запускать OOo всегда с локалью ru_RU.CP1251. Это исключило
бы возможность применения KOI8 при попытке сохранения в
неюникодовых форматах...



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