在表单提交的数据中,中文乱码是一个很麻烦又很常见的问题。如何解决呢?请参照我的方法,逐步解决问题吧。
前提:保证JSP页面的编码格式均为:(提交方式为:POST)
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="UTF-8"%>
1:设置struts.xml
<constant name="struts.il8n.encoding" value="UTF-8"></constant>
运气好的话,这步就能解决问题了;如果还不行,请继续往下看;
2:设置一个过滤器filter,强制更改request编码:
public class CharacterEncodingFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
/**
* 专门写的转码用(UTF-8),防止中文乱码
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
同时设置web.xml:
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>util.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意:这个filter和filterMapping一定要放在web.xml的最顶端!切记!否则会失效!
操作玩这步肯定是没问题了;
这样的话,post提交没问题了,但是get呢?get有可能还会出现乱码问题。想要一劳永逸,继续设置:
以tomcat服务器为例:
设置conf文件夹中的server.xml,找到你的端口号那行:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
设置URIEncoding="UTF-8"就行了;
以上都是用血的教训,珍贵的时间一个个调试出来的,保证没问题!