我正在开发一个基于Spring MVC + Hibernate的应用程序,使用带有InnoDB引擎的MySQL(版本为5.0.51a)。
问题出现在当我提交一个包含西里尔文字符的表单时。结果是,数据库中包含了无法识别编码的无意义字符。
所有的JSP页面、数据库(包括表和字段)都使用UTF-8创建。 Hibernate的配置也包含将编码设置为UTF-8的属性。
我通过创建过滤器对请求内容进行UTF-8编码来解决了这个问题。 示例代码:
…
encoding = "UTF-8";
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
…
但这明显会拖慢应用程序。
有趣的是,直接从应用程序执行插入查询(即从Eclipse作为Java应用程序运行)效果完美。
更新。
据我所知,在我的情况下使用过滤器是唯一可行的解决方案。
我不知道有关标准CharacterEncodingFilter的信息。现在使用它,效果非常好!
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
doFilter()
方法声明为synchronized
? - Bozho