Я объясню свою проблему с самого начала, у меня есть сервер Ubuntu 8.04LTS, и я использую приложение Java с Tomcat 6.0.18 и JRE 1.6. Проблема в том, что отображение таких символов, как (é è ç û) заменяется другими странными символами. Я знаю, что это проблема кодировки символов, поэтому пытаюсь добавить кодировку fr_FR.ISO-8859-1
в файле bashrc и /etc/default/locale
и я добавил LANG="fr_FR.ISO-8859-1"
. Я успешно отображаю хорошие символы с удаленной консоли (PuTTY), но та же проблема по-прежнему возникает при вводе текста непосредственно на сервере оболочки.
Например, когда я mkdir
папку под названием «Août» я получаю «Ao ♦ t».
Я думаю, что это может быть связано с кодировкой, используемой системным разделом, но я не знаю, как я могу это проверить.
Есть ли у кого-нибудь идеи, как это исправить?
ОБНОВИТЬ: возможно, это констатирует очевидное, но вы должны постоянно использовать ISO-8859-1 или UTF-8 везде, как в общесистемных настройках (/etc/default/locale
) и (при необходимости) в настройках Java приложения.
Вам нужно изменить общесистемный языковой стандарт для использования ISO-8859-1 - однако было бы намного чище, если бы приложение поддерживает UTF-8, просто чтобы оно использовало это (через -Dfile.encoding=utf8
на JVM), так как Ubuntu теперь по умолчанию работает в UTF-8.
Обратитесь к документации вашего приложения, чтобы узнать, как установить языковой стандарт и кодировку (например, ISO-8859-1) - если это не предусмотрено, установите Переменная среды JAVA_TOOL_OPTIONS может быть полезно - это может быть в сценарии запуска приложения.
Чтобы настроить Ubuntu на использование ISO-8859-1:
sudo locale-gen fr_FR sudo update-locale LANG=fr_FR.ISO-8859-1
В отличие от Windows и Mac, файловые системы в Linux не имеют понятия кодировки символов, поэтому приложение может генерировать файлы с именами путей ISO-8859-1 или UTF-8 по желанию и даже смешивать их в одном каталоге. Вот почему вы можете создать каталог как «Août», и он будет неправильно отображаться в другой оболочке.
С помощью env | egrep "^(LC|LANG)"
может быть полезно для проверки настроек переменных локали - похоже, что настройки для вашей локальной оболочки (xterm, GNOME Terminal и т. д.) неверны. Как только у вас будут правильные настройки, поместите их в ~/.bashrc
файл для оболочки.
Если у вас есть папки, созданные с неправильной кодировкой в именах путей, взгляните на convmv - это в репозиториях Ubuntu.
Некоторая общая информация о настройке локалей и кодировок символов в этом Gentoo UTF-8 HOWTO - хотя это не для Ubuntu, поэтому некоторые команды отличаются, locale
команда такая же, и идеи объяснены достаточно хорошо.
Попробуйте определить LC_ALL
так же.
Также, если вы используете xterm, когда видите это локально, попробуйте запустить его с -U
параметр.
Однако если у вас проблемы с Tomcat, вам, вероятно, следует установить -Dfile.encoding=utf8
или -Dfile.encoding=iso8859-1
вместо этого в качестве параметров JVM. Возможно вам также понадобится -Duser.region=fr
?