我在 Spring MVC + Hibernate 应用程序上工作,使用 MySQL(版本 5.0.51a)和 InnoDB 引擎。
当我发送带有西里尔字符的表单时出现问题。 结果,数据库包含未知编码的无意义字符。
所有使用 UTF-8 创建的 JSP 页面、数据库(+ 表和字段)。 Hibernate 配置还包含将编码设置为 UTF-8 的属性。
我通过创建使用 UTF-8 编码请求内容的过滤器解决了这个问题。 示例代码:
…
encoding = "UTF-8";
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
…
但它明显减慢了应用程序的速度。
有趣的是,直接从应用程序执行插入查询(即从 Eclipse 作为 Java 应用程序运行)工作完美。
UPD。
据我所知,在我的案例中使用过滤器是唯一可行的解决方案。
我不知道标准的 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>
最佳答案
您的 JSP 文件必须是 UTF-8,这有两种方式:
- 标题
<%@page pageEncoding="UTF-8" %>
- 他们的内容 -
right-click > properties
在 eclipse 中并将其编码设置为 UTF-8(它可能会拒绝转换它,因此剪切当前内容,更改编码,然后将其粘贴回去)
然后spring有一个 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>
实际上,任何过滤器都不会对性能造成重大影响,除非其 doFilter()
方法声明synchronized
.
关于java - Spring MVC + Hibernate编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2474285/