2011-12-28 10 views
5

Sto lavorando alla conversione di alcuni file di proprietà da iso-8859-1 a utf-8. Ho implementato un resource.control per la maggior parte dei file di risorse in modo che potesse leggere come codifica utf-8.Spring util: proprietà - puoi cambiare la codifica in UTF-8?

Mi sono imbattuto in un file delle proprietà definito in primavera utilizzando il tag util: properties.

Mi chiedevo se c'è un modo per specificare che la codifica predefinita sia utf-8? Ho esaminato la possibilità di definirlo come bean con ReloadableResourceBundleMessageSource, tuttavia ciò richiederebbe un processo di refactoring di grandi dimensioni, poiché la logica nel bean si aspetta che questa sia una mappa.

definita usando molla 3.0.5

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

So che da proprietà definizione java file sono iso-8859-1 codificato, tuttavia ho pensato che la molla potrebbe venire con un modo per cambiare la codifica di (come il Resource.Control)

risposta

8

Recentemente ho risolto lo stesso problema usando PropertiesFactoryBean. Si tratta di una sottoclasse di PropertiesLoaderSupport, che dispone di un metodo di setter pubblico che consente di specificare la codifica del file di proprietà.

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

Si prega di notare che secondo the api doc, esso si applica solo ai file di proprietà classiche, non in file XML.

-1

Ho scoperto che questo non è possibile. Spring (sempre v3.0.5) utilizzerà sempre la codifica predefinita dei file delle proprietà, che è ISO-8859-1.

L'alternativa è utilizzare un oggetto proprietà, quindi convertirlo in una mappa.

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

poi a convertire per mappare

Map<String,String> mapYouWant = new HashMap<String,String>((Map) propsToLoad); 
Problemi correlati