我们在做web项目时,常常会遇到烦恼的中文乱码问题,现在我们尝试一下用字符过滤器解决这个问题。 首先,字符过滤器的代码如下: package com.technology.util.filter; 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; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; /** * <pre> * 过滤器,对中文字符进行编�? * </pre> * * 对HttpServletRequestWrapper类进行扩�??, 在不影响原来的功能并能提供所有的HttpServletRequest * 接口中的功能,统�??的对默认设置下的中文问题进行解决,实际操作就是将新生成的Request对象替换页面中请求的request对象即可 */ public class EncodingFilter implements Filter { // 编码格式 private String encoding = null; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; if (httpRequest.getMethod().equals("GET")) { request = new Request(httpRequest); } request.setCharacterEncoding(this.encoding); chain.doFilter(request, response); } /** * init 实现了接口javax.servlet.Filter.init * 意是获得web.xml中的参数名为encoding的�??,既utf-8 * <param-name>encoding</param-name><param-value>UTF-8</param-value> */ public void init(FilterConfig fc) throws ServletException { this.encoding = fc.getInitParameter("encoding"); } public void destroy() { this.encoding = null; } /** * 扩展HttpServletRequestWrapper�?? */ class Request extends HttpServletRequestWrapper { public Request(HttpServletRequest request) { super(request); } /** * 转换由表单读取的数据的内码, 从ISO字符转到GBK */ public String toChina(String input) { try { byte[] bytes = input.getBytes("ISO8859-1"); return new String(bytes, encoding); } catch (Exception ex) { } return null; } private HttpServletRequest getHttpServletRequest() { return (HttpServletRequest) super.getRequest(); } /** * 读取参数列表,修正了中文问题 * 重写javax.getParameterValues,截获jsp传过来的参数并用toChina()转成中文 */ public String[] getParameterValues(String name) { String values[] = getHttpServletRequest().getParameterValues(name); if (values != null) { for (int i = 0; i < values.length; i++) { values[i] = toChina(values[i]); } } return values; } } } 类似的过滤器代码网上很多,大家可以自己搜搜看。然后我们需要在web.xml中加一段配置 <!-- 字符过滤器配置 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>com.zjcontest.util.filter.EncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 字符过滤器配置 --> 这要就好了。