POST方式提交乱码解决
乱码的问题比较常见,确保各地方的编码格式均统一是保证不出现乱码的必要条件,但还是常会有编码都统一了仍然出现乱码的情况。
第一步:
确认JSP页面头部是否有:
<%@ page contentType="text/html; charset=UTF-8" %>
第二步:
- 在表单不多的情况的可以偷懒的方式考虑:
String param= new String(request.getParameter("param").getBytes("ISO-8859-1"), "UTF-8");
- 如果表单太多,建议做统一的转码处理,添加过滤器:
首先,添加一个filter类
package com.test.commons.work; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; /** * 请求中中文字符串过滤类 */ public class SetEncodingFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("请求转码过滤器==================="); request.setCharacterEncoding("utf-8"); chain.doFilter(request, response); } public void destroy() { } }
其次,并在web.xml中添加如下拦截器:
<filter> <filter-name>Set Encoding</filter-name> <!--包名+类名--> <filter-class>com.test.commons.work.SetEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>Set Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
这样设置后,每次url访问都会先经过拦截器,对request进行编码。