Hibernate Validator i18n校验消息显示乱码问题如何解决
乱码根因
你看到的નામ...形式乱码是典型的UTF-8编码多字节文本被按ISO-8859-1单字节编码错误解码导致的,具体触发逻辑:
- 配置的
ReloadableResourceBundleMessageSource默认采用ISO-8859-1编码读取properties资源文件,而存放古吉拉特语文本的validation_gu.properties实际以UTF-8编码存储,读取阶段就已经发生编码错误,和后续JSP页面、浏览器编码配置无关(当前JSP端的UTF-8配置是正确的)。 - 英文资源文件无乱码是因为英文字符在UTF-8和ISO-8859-1编码下的字节表示完全一致,不会触发解码错误。
可行解决方案
- 给
validationMessageSourceBean显式指定资源文件读取编码为UTF-8,修改Spring XML配置如下:
<bean id="validationMessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basename" value="classpath:validation" /> <!-- 新增配置:指定按UTF-8编码读取properties资源文件 --> <property name="defaultEncoding" value="UTF-8"/> <!-- 可选配置:开发环境可设置缓存时间为0,修改资源文件后无需重启即可生效 --> <property name="cacheSeconds" value="0"/> </bean>
- 确认开发工具中properties文件的保存编码:
- IDEA环境打开
Settings -> Editor -> File Encodings,将Default encoding for properties files设置为UTF-8,同时勾选Transparent native-to-ascii conversion选项,避免IDE自动转码引发额外问题。 - Eclipse环境打开资源文件属性页,将文本文件编码设置为UTF-8后重新保存古吉拉特语资源内容。
- IDEA环境打开
- 配置修改后重启应用服务,清空浏览器缓存再访问即可正常显示古吉拉特语校验消息。
内容的提问来源于stack exchange,提问作者prem30488
相关产品推荐
相关产品推荐

