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>