2015-04-14 5 views
0

У меня есть файл свойств со следующим ключом и значением:Java свойства: � отображаются вместо того, чтобы

elsi.log.status.1    = Keine Änderungen 

Но символ не отображается должным образом на веб-странице. Выход �

Но если я использую Грани-конфигурации, а затем вывести на дисплей сообщение с XHTML отображается это же сообщение, как и в файле свойств

Этот метод используется для получения значений из файла свойств в java. Когда я отлаживать значение Allready неправильно здесь (bundle.getString (ключ) возвращает Keine �nderungen)

public static String getString(String key) { 
    try { 
     Locale locale = CurrentEnvironment.getLocale(); 
     ResourceBundle bundle = ResourceBundle.getBundle(BUNDLE_NAME, locale); 
     if (bundle != null) { 
      return bundle.getString(key); 
     } 
    } catch (MissingResourceException e) { 
     return '!' + key + '!'; 
    } 
    return '!' + key + '!'; 
} 

Прямой выход с XHTML работает

<h:outputText value="#{messages.elsi_copyright}" /> 

Я также заметил, что замена символов в propertyfile с шестнадцатеричными кодами помог, но я хочу знать, можно ли это сделать иначе.

Спасибо за вашу помощь

ответ

4

Проблема заключается в том, что ResourceBundle.getBundle() использует ISO Latin-1 кодировку для чтения пучков и, следовательно, не может интерпретировать UTF-8 файлов (которые будут иметь место при вставке нелатинский-1 такие символы, как ä и т. д.).

В настоящее время я могу думать 2 растворов:

  1. Заменить каждый специальный символ с закодированной форме, например, используя unicode-точку в форме \u00E4 для ä и т. д.
  2. с Java 5 ResourceBundle предоставляет средства для чтения файлов UTF-8, хотя внутренний механизм кэширования и резервного копирования в этом случае не будет работать, и вам придется делать что вы сами.

Обновление: вместо примера для нет. 2, пожалуйста, смотрите здесь: How to use UTF-8 in resource properties with ResourceBundle

Есть много хороших ресурсов, которые помогут вам разобраться с пучками, содержащими умлауты и т. Д., Таким образом, который соответствует вашим потребностям.

+0

поэтому является перечисленные здесь [википедия 8859-1] (http://de.wikipedia.org/wiki/ISO_8859-1) – 0riginal

+0

@ 0riginal Я посмотрю, но у нас также была эта проблема и мы используем два решения, о которых я упоминал. Основная проблема заключается в том, что что-то (например,ваш редактор) заставляет файл кодироваться с помощью UTF-8, если содержится символ не латинского-1 (не-ASCII?). – Thomas

+0

Я думаю, что это тот случай, когда я использую Eclipse для редактирования моих файлов. – 0riginal

0

Файлы свойств жестко закодированы в ISO-8859-1. Если на вашей странице есть другая кодировка (например, UTF-8), вы столкнетесь с проблемами кодирования.

К счастью, Java ResourceBundles предоставляют альтернативный способ: использование файлов XML. Вам не нужно ничего менять в коде, просто используйте формат XML, как описано в javadoc файла java.util.Properties. Эти файлы могут быть закодированы в любой кодировке, если вы укажете ее в заголовке XML.

Его доктайп является

<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> 

Пример:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> 
<properties> 
<entry key="com.compant.key1">value1</entry> 
<entry key="com.company.key2">value2</entry> 
... 
</properties> 
+0

моя веб-страница iso-8859-1 и работает с jsf, но не с java К сожалению, я не могу изменить свойства на xml: / – 0riginal

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