日前做项目,发现以@Value注解读取properties文件中的中文值出现乱码,造成bug,上网查找,发现有N种方案,神马在idea、Eclipse中显示正常的统统不看,我是要保证程序执行的时候正确,IDE编辑的时候查看是不是正确并不重要。

方案1,将中文字转成unicode字符,存在properties文件中,这是最简单的托底方案,可以用来救急。但这样的properties文件可读性实在太差。

方案2,使用yaml格式或者xml格式。改用了yaml格式,咦,还是乱码,放弃。

方案3,使用@PropertySource注解来代替XML里的配置。咦,还是乱码,放弃。

@PropertySource(value = "classpath:xxx.properties",encoding = "UTF-8")

方案4,在context:property-placeholder标签中加入file-encoding属性。咦,还是乱码,放弃。

<context:property-placeholder location="classpath:xxx.properties" file-encoding="UTF-8"/>

嗯?这些方案都乱码,难道非得用方案1吗?等下,一定有哪里忽略了。

再仔细看了下,在context:property-placeholder标签中使用前,必须在PropertyPlaceholderConfigurer的bean中登记,这个地方有没有编码配置呢?加上编码配置,果然OK。

<property name="fileEncoding" value="UTF-8"></property>

现在回想,方案2、方案3,是不是都是因为缺少这一行代码造成还是乱码的呢?目前还没验证。

作者 龙飞