Мне нужно использовать UTF-8 в свойствах моего ресурса, используя Java ResourceBundle
. Когда я ввожу текст прямо в файл свойств, он отображается как mojibake.
Мое приложение работает на Google App Engine.
Кто-нибудь может дать мне пример? Я не могу получить эту работу.
java.util.ResourceBundle
, а неjava.util.Properties
.Ответы:
В
ResourceBundle#getBundle()
использует под одеялом ,PropertyResourceBundle
когда.properties
в указанный файл. Это в свою очередь использует по умолчаниюProperties#load(InputStream)
для загрузки этих файлов свойств. Согласно javadoc , они по умолчанию читаются как ISO-8859-1.Итак, вам нужно сохранить их как ISO-8859-1. Если у вас есть какие-либо символы за пределами диапазона ISO-8859-1, и вы не можете использовать
\uXXXX
их в верхней части головы, и, таким образом, вы вынуждены сохранить файл как UTF-8, то вам необходимо использовать инструмент native2ascii для преобразования Файл свойств, сохраненный в UTF-8, в файл свойств, сохраненный в ISO-8859-1, в котором все непокрытые символы преобразуются в\uXXXX
формат. Приведенный ниже пример преобразует файл свойств в кодировке UTF-8text_utf8.properties
в действительный файл свойств в кодировке ISO-8859-1text.properties
.При использовании нормальной IDE, такой как Eclipse, это автоматически выполняется, когда вы создаете
.properties
файл в проекте на основе Java и используете собственный редактор Eclipse. Eclipse будет преобразовывать символы вне диапазона ISO-8859-1 в\uXXXX
формат. Смотрите также скриншоты ниже (обратите внимание на вкладки «Свойства» и «Источник» внизу, щелкните для увеличения):В качестве альтернативы вы также можете создать пользовательскую
ResourceBundle.Control
реализацию, в которой вы явно читаете файлы свойств как UTF-8, используя ихInputStreamReader
, так что вы можете просто сохранить их как UTF-8 без необходимости суетитьсяnative2ascii
. Вот начальный пример:Это можно использовать следующим образом:
Смотрите также:
источник
StandardCharsets.UTF_8
если вы используете Java 7+Учитывая, что у вас есть экземпляр ResourceBundle, и вы можете получить String:
Я решил проблему с отображением на японском языке:
источник
посмотрите на это: http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#load(java.io.Reader)
свойства принимают объект Reader в качестве аргументов, который вы можете создать из InputStream.
во время создания вы можете указать кодировку Reader:
затем примените этот Reader к методу загрузки:
Кстати: получить поток из файла .properties :
Кстати: получить пакет ресурсов от
InputStreamReader
:надеюсь, это поможет вам!
источник
ResourceBundle
, хотя.Properties
и хотите получитьUTF-8
строку, тогда это работает как талисман. Однако дляResourceBundle
таких языковых ресурсов принятый ответ является элегантным. Тем не менее, до проголосовал за ответ.ResourceBundle rb = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8"))
ResourceBundle.Control
с UTF-8 и новыми методами String не работают, например, если в файле свойств используется кодировка cp1251.Поэтому я рекомендовал использовать общий метод: писать в юникоде символах . Для этого:
IDEA - имеет специальное « Прозрачное преобразование из нативного в ASCII » опцию (Настройки> Кодировка файла).
Eclipse - имеет плагин « Редактор свойств » . Может работать как отдельное приложение.
источник
Эта проблема была наконец исправлена в Java 9: https://docs.oracle.com/javase/9/intl/internationalization-enhancements-jdk-9
Кодировка по умолчанию для файлов свойств теперь UTF-8.
источник
Мы создаем файл resources.utf8, который содержит ресурсы в UTF-8, и имеем правило для запуска следующего:
источник
native2ascii
? Я просто сделалfind / -name native2ascii*
и не получил результатов, поэтому я предполагаю, что это не просто часть JDK ...jdk1.*.0_*/bin
.источник
Внимание: файлы свойств java должны быть закодированы в ISO 8859-1!
@see Properties Java Doc
Если вы все еще действительно хотите сделать это: взгляните на: Свойства Java Кодировка UTF-8 в Eclipse - есть несколько примеров кода
источник
http://sourceforge.net/projects/eclipse-rbe/
как уже указано, файлы свойств должны быть закодированы в ISO 8859-1
Вы можете использовать вышеуказанный плагин для Eclipse IDE, чтобы сделать преобразование Unicode для вас.
источник
Вот решение Java 7, которое использует отличную библиотеку поддержки Guava и конструкцию try-with-resources. Он читает и записывает файлы свойств, используя UTF-8 для простоты в целом.
Чтобы прочитать файл свойств как UTF-8:
Чтобы написать файл свойств как UTF-8:
источник
Как было предложено, я прошел реализацию пакета ресурсов ... но это не помогло ... так как пакет всегда вызывался в en_US locale ... я пытался установить свой язык по умолчанию на другой язык, и все же моя реализация пакета ресурсов элемент управления вызывался с помощью en_US ... я попытался поместить сообщения журнала и выполнить шаг отладки и посмотреть, был ли сделан другой локальный вызов после того, как я изменил локаль во время выполнения через вызовы xhtml и JSF ... которые не произошли ... затем я попытался сделать системный набор по умолчанию utf8 для чтения файлов моим сервером (tomcat server) .. но это вызвало pronlem, так как все мои библиотеки классов не были скомпилированы под utf8 и tomcat начал читать тогда в формате utf8 и сервер не работал должным образом ... тогда я закончил с реализацией метода в моем контроллере Java, который будет вызываться из файлов xhtml ..в этом методе я сделал следующее:
Я особенно нервничал, так как это может замедлить производительность моего приложения ... однако, после реализации этого, похоже, что мое приложение теперь работает быстрее ... я думаю, что это потому, что я теперь непосредственно обращаюсь к свойствам вместо того, чтобы JSF разбирает свой путь в доступе к свойствам ... я специально передаю логический аргумент в этом вызове, потому что я знаю, что некоторые свойства не будут переведены и не должны быть в формате utf8 ...
Теперь я сохранил свой файл свойств в формате UTF8, и он работает нормально, так как каждый пользователь в моем приложении имеет референтный языковой стандарт.
источник
источник
Из-за того, что стоит моей проблемы, было то, что сами файлы были в неправильной кодировке. Использование iconv работало для меня
источник
iconv
. Я никогда не слышал об этом раньше, но я набрал это в консоли и вот, это вещь, которая существует (во всяком случае, в CentOS 6)Я попытался использовать подход, предложенный Родом, но с учетом озабоченности BalusC не повторять один и тот же обходной путь во всех приложениях, и пришел с этим классом:
Способ использования этого будет очень похож на обычное использование ResourceBundle:
Или вы можете использовать альтернативный конструктор, который по умолчанию использует UTF-8:
источник
Откройте диалоговое окно «Настройки / Настройки» ( Ctrl+ Alt+ S), затем нажмите «Редактор» и «Кодировки файлов».
Затем в нижней части вы найдете кодировки по умолчанию для файлов свойств. Выберите тип кодировки.
В качестве альтернативы вы можете использовать символы юникода вместо текста в вашем наборе ресурсов (например,
"ів"
равно\u0456\u0432
)источник
С Java 9 по умолчанию для загрузки файла свойств был изменен на UTF-8. https://docs.oracle.com/javase/9/intl/internationalization-enhancements-jdk-9.htm
источник