亂碼的問題比較常見,確保各地方的編碼格式均統一是保證不出現亂碼的必要條件,但還是常會有編碼都統一了仍然出現亂碼的情況。
第一步:
確認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進行編碼。