2015-05-29 3 views
0

У меня есть приложение Java, в котором пользователь вводит «испанский символ» из пользовательского интерфейса и должен отображаться на другой странице. Приложение прекрасно работает в среде WINDOWS, но при развертывании на сервере UNIX/Linux испанские символы отображаются неправильно.Испанский символ не поддерживается на сервере linux

Вот мои настройки локали Unix (с помощью локалите команды)

LANG= 
LC_CTYPE="C" 
LC_COLLATE="C" 
LC_MONETARY="C" 
LC_NUMERIC="C" 
LC_TIME="C" 
LC_MESSAGES="C" 
LC_ALL= 

моего кодер Юникс окно символов (с использованием Java я проверил Charset.defaultCharset()) является ISO 8859 1 И мой Java-код для отображения этих данных является

spanishName = new String(spanishName.getBytes("8859_1"), "UTF-8"); 

теперь печатает N?? L???d?

Если я печатаю эту переменную напрямую, то NT= LTß±dTr.

Но исходные данные Néó Léáñdér

+0

Вы принимаете ISO Latin каждый раз. Возможно, вам не требуется конвертировать в Unicode при развертывании на вашем сервере * nix. – Mena

+0

Извините, все это немного расплывчато ... Очевидно, вы не можете правильно визуализировать такие символы при использовании ISO-8859-1 или ASCII, так как они не содержатся и должны быть интерпретированы с ошибкой. Вопрос здесь: _why_ ваша среда имеет эту настройку. Поэтому сегодняшняя Linux-система использует кодировку UTF-8, если не указано иное. поэтому ваши настройки языкового стандарта должны содержать что-то вроде 'en_US.UTF-8' ... – arkascha

+0

Я думаю, мы используем старый ящик UNIX, и изменение этих параметров выходит за рамки моей. Мне нужны правильные данные в моем коде. Скажите, пожалуйста, можем ли мы обработать или переопределить его в нашем Java-коде. и только для моей информации, как мы можем изменить настройки locale_ в unix-окне? – user3035305

ответ

2

UTF-8 кодировка не будет отображаться в POSIX "C" локали. Ваш сервер может поддерживать другие локали. Чтобы убедиться в этом, запустите

locale -a 

и искать настройки, которые заканчиваются в различных «utf8» или «utf8» (как прописных и строчных). Если вы его найдете, установите переменные окружения локали в , что.

Предположим, вы нашли en_US.UTF-8. Затем (если ваша оболочка является ksh или bash), вы могли бы выполнить эти команды перед запуском приложения Java:

unset LANGUAGE 
LANG=en_US.UTF-8; export LANG 
LC_CTYPE=en_US.UTF-8; export LC_CTYPE 
LC_ALL=en_US.UTF-8; export LC_ALL 

В csh, что бы

unsetenv LANGUAGE 
setenv LANG en_US.UTF-8 
setenv LC_CTYPE en_US.UTF-8 
setenv LC_ALL en_US.UTF-8 

Это было бы установить язык системы , Есть дополнительные способы настройки локали, как отмечено в

То есть, в командной строке (цитируя документации в Oracle):

Во-вторых, на некоторых реализациях исполнения Java, пользователь приложения может ove измените локальный стандарт хоста, предоставив эту информацию в командной строке, установив свойства системы user.language, user.country и user.variant.

и это дает в качестве примера

java -Duser.language=fr -Duser.country=CA Default 

и, наконец,

В-третьих, приложение может вызвать метод setDefault(Locale aLocale). Метод setDefault (Locale aLocale) позволяет вашему приложению устанавливать системный ресурс. После того, как вы установили локаль по умолчанию с помощью этого метода, последующие вызовы Locale.getDefault() вернут вновь установленный язык.

Обратите внимание, что Java использует разные имена из локальных систем, и не все они поддерживаются на каждой платформе (см. table); вам нужно будет найти то, что работает для вас.

+0

Как я могу настроить среду своего языка (я не знаю UNIX)? ... Можем ли мы добиться этого без изменения среды? – user3035305

+0

Благодарим вас за информацию. Я не думаю, что у меня есть разрешение изменить его. Так или иначе, я должен сделать это в java. мы можем справиться с этим в Java-коде? – user3035305

Смежные вопросы