О методе перекодировки символов
Этот метод многие используют неправильно, наверное, не совсем понимая его суть и ограничения. Он предназначен для восстановления верных кодов букв, если они были неверно проинтерпретированы. Суть метода проста: из полученных неверных символов, используя соответствующую кодовую страницу, восстанавливается исходный массив байтов. Затем из этого массива байтов, используя уже корректную страницу, получаются нормальные кода символов. Пример:
String res = new String( src.getBytes("ISO-8859-1"), "Cp1251" );
Проблем в использовании этого приёма может быть несколько. Например, для восстановления используется неверная страница, или же она может измениться в некоторых ситуациях. Другая проблема может быть в том, что некоторые страницы выполняют неоднозначное преобразование byte <-> char. Смотрите, например, описание ошибки за номером 4296969.
Поэтому пользоваться этим методом стоит только в самом крайнем случае, когда уже ничто другое не помогает, и Вы чётко себе представляете, где именно происходит неверное преобразование символов.
Русские буквы и MS JVM
Непонятно по каким соображениям, но в ней отсутствуют все файлы кодировок русских букв, акромя Cp1251 (наверное, они таким образом пытались уменьшить размер дистрибутива). Если Вам нужны другие кодировки, например, Cp866, то нужно добавить соответствующие классы в CLASSPATH. Причём классы от последних версий Sun JDK не подходят - у Sun-а уже давно изменилась их структура, поэтому последние версии классов с Microsoft-ом не стыкуются (у MS осталась структура от JDK 1.1.4). На сервере Microsoft, в принципе, лежит полный комплект дополнительных кодировок, но там файл размером около 3 метров, а их сервер докачку не поддерживает :-). Мне удалось таки выкачать этот файл, я его переупаковал jar-ом, можете взять его отсюда.
|
|
Если же Вы пишете апплет, который должен работать под 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. Соответственно Вам нужно выбрать один и пользоваться им.
Дата добавления: 2019-07-15; просмотров: 169; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!