середу, 14 травня 2008 р.

Лечим utf8 в man


Наверняка Вы заметили, что не смотря на рекомендации мануала по переводу на\включению юникода в gentoo, русские man'ы выводятся в искажённом виде. В этом посте можете оценить лёгкий способ, как избавиться от этой ошибки



Вот исходный вид вывода man mc на свежеустановленном Gentoo, но уже при настроенном юникоде (файлы русских man'ов идут в кодировке koi8-r):


/etc/man.conf
...
NROFF /usr/bin/nroff -Tascii -c -mandoc
...


вот что выводит man mc при такой настройке man'а


MC(1) GNU Midnight Commander MC(1)



iaeiaii-:-aiea
mc - -:-EUOAIOIAN IAIIIbEA AIN Unix-DIAIAIUE OEOOAI.

...


Как можно заключить из повторяющихся символов, исходной восьмибитной кодировке man'а (koi8-r) обрубили восьмой бит, а потом вывели в юникод.
Если последовать рекомендации Использование UTF-8 в Gentoo, и изменить строку с NROFF в /etc/man.conf на


/etc/man.conf
...
NROFF /usr/bin/nroff -mandoc -c

...


то получим чуть более содержательную кашу из символов:


MC(1) GNU Midnight Commander MC(1)



îáéíåîï÷áîéå
mc - ÷ÉÚÕÁÌØÎÁÑ ÏÂÏÌÏÞËÁ ÄÌÑ Unix-ÐÏÄÏÂÎÙÈ ÓÉÓÔÅÍ.

...


Вобщем, одному хорошему человеку срочно понадобился man 3 exp, который у меня идёт в русском варианте. Решил из принципа подкинуть именно русский ман. Смотрите, что я на коленке состряпал за пару минут:


/etc/man.conf
...
NROFF /usr/bin/nroff -mandoc -c | iconv -c -f utf8 -t iso8859-1 | iconv -c -f koi8-r -t utf8
...


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


/etc/man.conf
...
NROFF /usr/bin/nroff -mandoc -c | iconv -c -t iso8859-1 | iconv -c -f koi8-r
...



А вот что получилось:


MC(1) GNU Midnight Commander MC(1)



НАИМЕНОВАНИЕ
mc - Визуальная оболочка для Unix-подобных систем.

...


Вот так :)

1 коментар:

Анонім сказав...

Несмотря на относительную древность статьи гугл её исправно показывает на первой странице при поиске проблем с русскоязычным маном.
Актуальное решение проблемы:
sudo emerge -C man;
sudo emerge man-db;
При удалении мана ругнётся на возможное повреждение системы, игнорируем - после установки ман-дб всё работает нормально.
По вкусу:
sudo emerge man-pages-ru;