我一直在使用 spring mvc 开发一个 Web 应用程序。当我使用 tomcat 7 和 mysql 数据库将其部署在 openshift 上时,出现以下问题。来自 HTML MULTIPART 表单的希腊字母保存在数据库中,如下所示:
此问题不会出现在我的本地部署中,其中字符正确保存为希腊字母。 为了确保我的 jsp 和 html 中使用 UTF-8 编码,我使用了:
<%@page language="java" pageEncoding="UTF-8" contentType="text/html;charset=utf-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
在我的 web.xml 中:
<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>
为了连接到数据库,我在连接 URL 中使用以下参数: ?useUnicode=true&characterEncoding=UTF-8
我还将以下数据库参数更改为 utf-8:character_set_client、character_set_connection、character_set_database、character_set_results、character_set_server 以及 utf8_general_ci 的排序规则。这是通过 SET 查询完成的。
关于可能导致编码问题的原因以及如何解决它有什么想法吗?
更新:HTML 表单是多部分的
最佳答案
该问题与以下版本 7.0.40 的 tomcat 错误有关(出现问题时 openshift 默认设置):
https://issues.apache.org/bugzilla/show_bug.cgi?id=54984
简而言之,tomcat 搞乱了多部分表单数据的编码。解决方法:
您可以使用此后的过滤器代替默认的多部分过滤器,或者将 tomcat 更新到版本 7.0.41 或更高版本。请注意,该解决方案尚未在 openshift 上进行测试。
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.support.MultipartFilter;
public class MyMultipartFilter extends MultipartFilter {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
request.getParameterNames();
super.doFilterInternal(request, response, filterChain);
}
}
关于java - Openshift tomact7 mysql 希腊语编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24257874/