Spring util: properties - вы можете изменить кодировку на UTF-8? - PullRequest
5 голосов
/ 29 декабря 2011

Я работаю над преобразованием некоторых файлов свойств из iso-8859-1 в utf-8. Я реализовал resource.control для большинства файлов ресурсов, чтобы он читался как кодировка utf-8.

Я натолкнулся на файл свойств, который был определен весной с помощью тега util: properties.

Мне было интересно, есть ли способ указать, что кодировкой по умолчанию будет utf-8? Я посмотрел на возможность определить это как bean-компонент с ReloadableResourceBundleMessageSource, однако это потребовало бы большого процесса рефакторинга, так как логика в бине ожидает, что это будет как карта.

определено с помощью пружины 3.0.5

<util:properties id="fooProperties" location="file:${AXE_APPCONFIG}/foo.properties"/>

Я знаю, что по определению файлы свойств java кодируются в iso-8859-1, однако я подумал, что Spring мог бы найти способ изменить его кодировку (например, Resource.Control)

Ответы [ 2 ]

8 голосов
/ 09 сентября 2012

Недавно я решил ту же проблему с помощью PropertiesFactoryBean . Это подкласс PropertiesLoaderSupport , который имеет метод открытого установщика, позволяющий вам указать кодировку файла свойств.

<beans:bean id="nameOfYourPropsVar" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <beans:property name="location" value="classpath:${yourPropFileName}"/>
    <beans:property name="fileEncoding" value="UTF-8"/>
</beans:bean>

Обратите внимание, что согласно api doc , это относится только к классическим файлам свойств, но не к файлам XML.

0 голосов
/ 29 декабря 2011

Я узнал, что это невозможно. Spring всегда (начиная с версии 3.0.5) будет использовать кодировку файлов свойств по умолчанию, а именно ISO-8859-1.

Альтернатива - использовать объект свойств, а затем преобразовать его в карту.

Properties propsToLoad = new Properties();
InputStream stream = new FileInputStream("filename.properties");
propsToLoad.load(new InputStreamReader(stream,"UTF-8));

затем преобразовать в карту

Map<String,String> mapYouWant = new HashMap<String,String>((Map) propsToLoad);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...