Корректное отображение русских символов в кодировке KOI8-R
Добрый день уважаемое сообщество Gentoo.
Вопрос заключается в следующем:
Работаю над сопровождением старой программы, написанной ранее (исходный код имеется). Программа использует GUI FLTK версии 1, раньше было все ОК, но потребовалась пересборка Gentoo Linux для поддержки нового железа. Раньше системная локаль была KOI8-R, сейчас UTF-8. Перестали отображаться русские символы в окне программы. Знаю что FLTK версии 2 поддерживает UTF-8, однако переход на нее выполнить нельзя, требуется перепысывать исходный код. Не могу победить глюки, не знаю куда копать.
О системе: Gentoo Linux 2008, Gcc 4.1.2, FLTX 1.1.7. Прога запускается в оддельном рабочем окне с помощью X-Window, используя следующий скрипт
#!/bin/sh
unset XAUTHORITY
if [ -x /usr/X11R6/bin/xclock ]; then
xclock=/usr/X11R6/bin/xclock
elif [ -x /usr/bin/xclock ]; then
xclock=/usr/bin/xclock
else
echo "${0##*/}: cannot find xclock in /usr/X11R6/bin or /usr/bin" 1>&2
exit 1
fi
setsid xinit $xclock -- :1 -depth 8 >/dev/null 2>&1
disown
Кто в курсе как лечить, помогите.
Спасибо за раннее всем ответившим.
- Для комментирования войдите или зарегистрируйтесь
Копать старые доки по
Копать старые доки по локализации иксов под кои8. Насколько помню, локаль определяется переменной окружения LANG.
Можно попробовать запускать как то так:
LANG=ru_RU.KOI8-R myprog
Второй вариант - вернуть кои на место.
Для корректного отображения символов необходимо чтоб под иксами были установлены русские шрифты в кои8.
А вообще, флтк достаточно плоская библиотечка. По идее должно собраться на раз. Я бы перенес на второй флтк.
"За ранее всем ответившим" -пожалуйста ;)
++; запуск firefox ,
++; запуск firefox
, ("M-w", spawn "LANG=ru_RU.utf8 firefox")
Я в бинарнике вижу нормальную
Я в бинарнике вижу нормальную строку в кодировке KOI8-R, почему FLTK ее коверкает при отображении понять сложно! Есть предположение что при выполнении команды emerge fltk она собирается с системной локалью UTF-8, но это лишь предположение. Вообще бы оторвал кое кому что нибудь, который посоветовал юзать GUI FLTK. А ведь есть еще в коде шаманство с бубном в виде "extern fl_encoding = "koi8-r";" на которое GCC сильно ругается.
Си и плюсы не перекодируют
Си и плюсы не перекодируют сурс. Строка попадает в бинарник как есть. Тоесть ежели исходник в кои, то и строки в бинаре будут в кои. Ежели конвертнуть сурсы в утф и откомпилить - получите строки в утф в бинарнике. Изображение под иксами может коверкаться по двум причинам. Первая - шрифт не содержит корректных символов для конкеретной локали, либо библиотека криво работает с утф.
И кстати у FLTK версии 2
И кстати у FLTK версии 2 иерархия классов иная, что влечет за собой переписывание всего огромного проекта.
Насчет оценки ВСЕГО - без
Насчет оценки ВСЕГО - без сурсов сказать сложно. Все зависит от того насколько сильно размазан флтк по сурсам. А это зависит от квалификации автора. Ежели лень - Верните локаль в кои.
.
Вы пишете "Верните локаль в кои."
ТС пишет "Раньше системная локаль была KOI8-R, сейчас UTF-8."
У меня вопрос - разве недостаточно сделать локаль KOI8-R в chroot, а системную оставить UTF-8?
Потому что лишнее. Програма
Потому что лишнее. Програма под линем определяет локаль по переменной окружения. Пример:
wi@nb ~ $ man passwd
....
НАЗВАНИЕ
passwd - изменяет пароль пользователя
......
wi@nb ~ $ LANG=C man passwd
....
NAME
passwd - change user password
.....
Иксам вообще кодировка не нужна. Они оперируют таблицей символов какого-либо шрифта, вытягивая нужный глиф по номеру. Итого - для смены локали иксовой проги нужна пременная LANG + шрифт с правильной таблицей.
Пример
LANG=ru_RU.KOI8-R xterm -fn -*-*-*-*-*-*-*-*-*-*-*-*-koi8-r
Это мы запустили икстерм под кои в системе под юникодом, указав использовать шрифты кои. Теперь в запущенном окне
wi@nb ~ $ echo ПРИВЕТ | enca
KOI8-R Cyrillic
LF line terminators
wi@nb ~ $ man passwd | enca
Universal transformation format 8 bits; UTF-8
Surrounded by/intermixed with non-text data
Ну еще бы, кирилизация под юникод проведена согласно манам. Да и имена файлов по ls в юникоде. Так и положено. Теперь почитаем манов
wi@nb ~ $ man passwd | enconv|less
........
НАЗВАНИЕ
passwd - изменяет пароль пользователя
......
А для сшрута нужен корень с программами, устройствами, библиотеками, иксами ..... Хотя работать по идее должно.
.
Вероятно, скажу глупость сейчас, но, возможно, вам поможет chroot с другой locale?
Глупость :D
Глупость :D
Working on Gentoo Linux for Asus P535 and Qtopia :-)
.
Объясните, пожалуйста, почему?