关于hibernate validation校验信息乱码问题
环境 IDEA SpringMVC4.3.16 win7X64 tomcat7
前提,project及ide的编码均为utf-8,properties编码设置为了gbk(系统默认)
在配置校验错误信息文件时,发现从properties中读取的中文均是乱码。半角数字正常,配置信息如下

ValidationMessage指向了具体的中文信息资源文件,该properties资源文件编码为gbk。
在网上查了很多资料 :
1、在IDEA的setting配置中修改properties文件编码为utf-8,无效;后在启动配置文件添加-Dfile.encoding=utf-8 强制utf-8解码,无效;
2、在tomcat启动项中添加-Dfile.encoding=utf-8 强制utf-8解码,无效;在server.xml中添加URLEncoding配置,无效;(思路错误)
后来整理下了思路。直接写了个test类从properties中读取中文信息,发现也是乱码,ok,有点眉目了。
检查了默认的项目编码Charset.defaultCharset().name() 显示为utf-8,properties编码仍然为gbk。
调整InputStreamReader读取的编码字符集为GBK,成功读出中文信息。
那么基本可以确定,乱码是发生在从propertes文件中读取的时候,还没有到容器内部就已经是乱码了。
检查了下上图MessageSource的配置,后修改为使用defaultEncoding

Properties文件仍然为gbk编码。
重启web应用后一切正常。
tips:
再次强调了读源码的重要性;
Properties这类资源文件在项目使用中要求统一编码(项目规范);
Charset.defaultCharset(),name()查看默认的project编码;
中间试过将资源文件改成utf-8格式,默认编码下正常,gbk下反而乱码,确认该配置生效,后续如果项目统一编码格式的话,以上几处的编码格式都是需要注意的;
最后:Charset.defaultCharset()受控于此处:

浙公网安备 33010602011771号