Смекни!
smekni.com

Java: Русские буквы и не только… (стр. 8 из 8)

Если же Вы пишете апплет, который должен работать под MS JVM и Вам потребовалось прочитать откуда-то (например из файла на сервере) байты в русской кодировке, отличной от Cp1251 (например, в Cp866), то стандартный механизм кодировок Вы уже не сможете использовать - апплетам запрещено добавлять классы в системные пакеты, коим в данном случае является пакет sun.io. Выхода тут два - или перекодировать файл на сервере в Cp1251 (или в UTF-8) или перед преобразованием из байтов в Unicode выполнять конвертацию байтов из нужной кодировки в Cp1251.

Руссификация Java под Linux

Скажу сразу - я с Linux не работаю, а приведённая здесь информация получена от читателей данного описания. Если Вы найдёте неточность или захотите дополнить - напишите мне.

При кириллизации JVM в Linux существует две параллельных проблемы:

Проблема вывода кириллицы в GUI-компонентах

Проблема ввода кириллицы с клавиатуры (в X11)

Проблему вывода можно решить таким способом (данный алгоритм прислал Artemy E. Kapitula):

Установить в X11 нормальные шрифты ttf из Windows NT/200. Я бы рекомендовал Arial, Times New Roman, Courier New, Verdana и Tahoma - причем подключать их лучше не через сервер шрифтов, а как каталог с файлами.

Добавить следующий файл font.properties.ru в каталог $JAVA_HOME/jre/lib

Проблема ввода решается примерно таким способом (данный алгоритм прислал Михаил Иванов):

Настройка ввода русских букв в следующей конфигурации:

Mandrake Linux 7.1

XFree86 3.3.6

IBM Java 1.3.0 (релизная)

Проблема:

IBM Java 1.3 не дает вводить русские буквы (видны как крокозябры) при том что на лейблах и в менюхах их видно.

Причина:

использование XIM ( -> xkb) в AWT. (это не есть плохо само по себе, просто с такими штуками нужно обращаться осторожно + некоторые прилады xkb не любят).

Решение:

Настроить xkb (и локаль (xkb без локали НЕ РАБОТАЕТ))

Процедура:

выставляется локаль (где-нибудь типа в /etc/profile или в ~/.bash_profile)

export LANG=ru_RU.KOI8-R

export LC_ALL=ru_RU.KOI8-R

правится (если это еще не сделано) /etc/X11/XF86Config. В секции Keyboard должно быть примерно следующее:

XkbKeycodes "xfree86"

XkbTypes "default"

XkbCompat "default"

XkbSymbols "ru"

XkbGeometry "pc"

XkbRules "xfree86"

XkbModel "pc101"

XkbLayout "ru"

XkbOptions "grp:shift_toggle" # переключение 2-мя шифтами

#XkbOptions "grp:caps_toggle" # переключение caps-lock'ом

примечание: такая настройка xkb не совместима с xrus (и ему подобными типа kikbd) а посему с ними придется распрощаться.

перезапускаются X-ы. Нужно проверить чтобы все работало (типа русские буковки в терминале и приложениях)

font.properties.ru -> $JAVA_HOME/jre/lib

fonts.dir -> $JAVA_HOME/jre/lib/fonts

cd $JAVA_HOME/jre/lib/fonts; rm fonts.scale; ln -s fonts.dir fonts.scale

Теперь русские буквы должны вводиться и выводиться в свинге без проблем.

Как Вы можете заметить, в описании приводились ссылки на различные файлы font.properties.ru для Linux. Отличаются они тем, какие шрифты будут использованы по умолчанию в AWT и Swing. Соответственно Вам нужно выбрать один и пользоваться им.