jsp代碼:
import javax.servlet.*; import javax.servlet.http.*; public class CharsetFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { try { HttpServletRequest httpRequest = (HttpServletRequest)request; String method = httpRequest.getMethod().toLowerCase(); if(method.equals("post")) { //如果是post,即表單方法,直接設置charset即可 request.setCharacterEncoding("UTF-8"); } else if(method.equals("get")) { //如果是get方法 request.setCharacterEncoding("UTF-8"); request = new HttpServletRequestWrapper((HttpServletRequest)request) { public String getParameter(String str) { try { return new String(super.getParameter(str).getBytes("iso-8859-1"),"GBK"); } catch(Exception e) { return null; } } }; } chain.doFilter(request, response); } catch(Exception e){} } public void init(FilterConfig filterConfig) { } }
過濾器配置:
<filter> <filter-name>CharFilter</filter-name> <filter-class>CharsetFilter</filter-class> </filter> <filter-mapping> <filter-name>CharFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping>
可能造成的原因:
頁面 後台業務 數據 中間有一個環節編碼不一致。
是否對該字段做了編碼轉換。
針對1:
檢查頁面編碼 是什麼編碼。如:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
過濾器設置的是什麼編碼。數據庫采用什麼編碼。然後最好統一編碼。
針對2:
看看是否做了強制轉換,或者設置了request response的編碼。
你這麼做就已經處理了
這是處理亂碼方法之一
1 String str = new String(“原串”.getBytes(“原編碼”),“須解析成的編碼”);
String username=new String(request.getParameter("username").getBytes("ISO8859-1"),"GB2312");
2 request.setCharacterEncoding("gb2312");
response.setCharacterEncoding("gb2312");
在tomcat的conf中server.xml文件中<context >中設置useBodyEncodingForURI="true"或URIEncoding="GB2312"重啟服務器
3 過濾器filter,就是對請求的地址進行攔截處理,然後交給servlet
新建一個filter,implements javax.servlet.Filter
覆蓋其三個方法
web.xml文件中增加一個<filter>標簽
<filter>中可以設置初始化參數<init-param></init-param>