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);