Почему файлы свойств JSF не принимают символы, отличные от ASCII, в Eclipse? - PullRequest
4 голосов
/ 08 апреля 2010

Интересно, почему файлы свойств JSF не принимают символы не ASCII в Eclipse?

У меня есть некоторый файл свойств с именем "messages.properties", я должен написать символы в кодировке Unicode для символов не ASCII, например:

title=\u01af\u0020\u0a3f0
header=\u0ff0\u0020\u0ab1

Это означает, что клиенты не могут редактировать эти файлы свойств с помощью обычных текстовых редакторов.

Есть ли какое-нибудь решение?

Ответы [ 3 ]

3 голосов
/ 08 апреля 2010

Это связано с тем, что java.util.Properties.load(InputStream) использует ISO-8859-1.

Методы load (InputStream) / store (OutputStream, String) работают так же, как пара load (Reader) / store (Writer, String), за исключением того, что поток ввода / вывода кодируется в кодировке символов ISO 8859-1 , Символы, которые не могут быть непосредственно представлены в этой кодировке, могут быть написаны с использованием экранирования Unicode; в escape-последовательности допускается только один символ 'u'. Инструмент native2ascii можно использовать для преобразования файлов свойств в другие кодировки и из них.

Это была проблема целую вечность. Я решил это с помощью Struts, реализовав пользовательские теги, которые выполняют преобразования кодирования, но это, как правило, боль.

Java 6 представляет Properties.load(Writer), который прекрасно работает с UTF-8, но, похоже, он еще не получил широкого распространения.

Я бы посоветовал использовать AnyEdit tools для конвертации в нотацию и из нее.

Что касается конечных пользователей - если они хотят редактировать файлы свойств (что звучит странно), то вы можете позволить им писать любые символы, которые им нравятся, а затем преобразовывать файлы, используя native2acii (или его оболочку)

1 голос
/ 09 апреля 2010

Это больше не нужно, начиная с Eclipse 4.2 (Juno, 2012). Eclipse позаботится об этом прозрачно, когда вы используете встроенный редактор файлов свойств. Он будет представлять и принимать значения в формате UTF-8, но он будет скрытно конвертироваться в формат \uXXXX. Следует отметить, что это имеет некоторые странные побочные эффекты в сочетании с плагином Git (например, старые строки, удаленные во время слияния), лучше всего работает, если вы закрываете все файлы свойств перед извлечением / нажатием.

Если вы еще не используете Eclipse 4.x, попробуйте использовать инструмент native2ascii, находящийся в папке /bin каталога установки JDK, для преобразования файлов свойств UTF-8 в файлы свойств ASCII, как описано в Javadoc java.util.Properties класс .

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

cd c:\path\to\properties\files
c:\path\to\jdk\bin\native2ascii.exe -encoding UTF-8 text_cs.properties.utf8 text_cs.properties
c:\path\to\jdk\bin\native2ascii.exe -encoding UTF-8 text_ja.properties.utf8 text_ja.properties
c:\path\to\jdk\bin\native2ascii.exe -encoding UTF-8 text_zh.properties.utf8 text_zh.properties
# You can add more properties files here.

Таким образом, вы можете просто отредактировать файлы .utf8 и запустить сценарий пакетной обработки / оболочки один раз, чтобы выполнить преобразование нативных символов в \uXXXX. Также смотрите эту запись в блоге .

Смотри также:

0 голосов
/ 20 июля 2015

просто сохраните файл .properties в формате UTF-8, и он работает для меня.

...