2011-12-28 18 views
5

Tôi đang làm việc để chuyển đổi một số tệp thuộc tính từ iso-8859-1 sang utf-8. Tôi đã triển khai một resource.control cho hầu hết các tệp tài nguyên để nó sẽ đọc dưới dạng mã hóa utf-8.Spring util: properties - bạn có thể thay đổi mã hóa thành UTF-8 không?

Tôi đã xem qua tệp thuộc tính đã được xác định trong mùa xuân bằng cách sử dụng thẻ thuộc tính util:.

Tôi đã tự hỏi liệu có cách nào để chỉ định rằng mã hóa mặc định là utf-8 không? Tôi đã nhìn vào khả năng xác định điều này như là một bean với ReloadableResourceBundleMessageSource, tuy nhiên nó sẽ yêu cầu một quá trình tái cấu trúc lớn, vì logic trong bean mong đợi điều này như một bản đồ.

định sử dụng lò xo 3.0.5

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

Tôi biết rằng theo các thuộc tính định nghĩa java file là iso-8859-1 mã hóa, tuy nhiên tôi nghĩ mùa xuân mà có thể đã tìm ra một cách để thay đổi mã hóa nó (như Resource.Control)

Trả lời

8

Gần đây tôi đã giải quyết cùng một vấn đề bằng cách sử dụng PropertiesFactoryBean. Nó là một phân lớp của PropertiesLoaderSupport, trong đó có một phương thức setter công cộng để bạn có thể chỉ định mã hóa của tập tin thuộc tính của bạn.

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

Xin lưu ý rằng theo the api doc, nó chỉ áp dụng cho tệp thuộc tính cổ điển, không áp dụng cho tệp XML.

-1

Tôi phát hiện ra rằng điều này là không thể. Mùa xuân sẽ luôn (theo v3.0.5) sử dụng mã hóa mặc định của các tệp thuộc tính, là ISO-8859-1.

Cách khác là sử dụng đối tượng thuộc tính rồi chuyển đổi thành bản đồ.

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

sau đó chuyển sang bản đồ

Map<String,String> mapYouWant = new HashMap<String,String>((Map) propsToLoad); 
Các vấn đề liên quan