Spring util:属性 - 您可以将编码更改为UTF-8吗?
问题描述:
我正在将一些属性文件从iso-8859-1转换为utf-8。我为大多数资源文件实现了resource.control,以便它读取为utf-8编码。Spring util:属性 - 您可以将编码更改为UTF-8吗?
我遇到了一个使用util:properties标签在spring中定义的属性文件。
我想知道是否有一种方法来指定默认编码为utf-8?我曾考虑过使用ReloadableResourceBundleMessageSource将它定义为一个bean的可能性,但是这需要一个大的重构过程,因为bean中的逻辑期望它是一个映射。
使用弹簧定义3.0.5
<util:properties id="fooProperties" location="file:${AXE_APPCONFIG}/foo.properties"/>
我知道通过定义Java属性文件是ISO-8859-1编码的,但是我认为,春天也许已经想出了一个办法改变的编码它(像Resource.Control)
答
我最近用PropertiesFactoryBean解决同样的问题。它是PropertiesLoaderSupport的子类,它具有一个公共setter方法,用于指定属性文件的编码。
<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>
请注意,根据the api doc,它仅适用于经典的属性文件,而不是XML文件。
答
我发现这是不可能的。 Spring将始终(自v3.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);