java內核和class文件是基於unicode碼的,這使Java程序具備良好的跨平臺性,但也致使在Java和JSP文件在編譯時以及Java程序與其餘媒介交互時等狀況下產生中文亂碼成爲可能。編碼方式的不一致,是形成中文亂碼的根本緣由。html
第一步:增長一個過濾器java
public class EncodingFilter implements Filter { private String encoding="utf-8"; public EncodingFilter() { } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { response.setContentType("text/html; charset=UTF-8"); request.setCharacterEncoding(encoding); chain.doFilter(request, response); } public void init(FilterConfig fConfig) throws ServletException { } }
作了第一步只能保證post提交方式不出現中文亂碼,但不能保證get與url方式提交不出現亂碼,因此要有第二步。瀏覽器
第二步:在Tomcat中的server.xml文件中,找到你的端口號那一行,好比我本身用的是默認的8080端口。添加useBodyEncodingForURI="true"post
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>編碼
由於在Tomcat5.0中,默認狀況下使用ISO- 8859-1對URL提交的數據和表單中GET方式提交的數據進行從新編碼(解碼),而不使用該參數對URL提交的數據和表單中GET方式提交的數據進行從新編碼(解碼)。要解決該問題,應該在Tomcat的配置文件的Connector標籤中設置useBodyEncodingForURI或者 URIEncoding屬性,其中useBodyEncodingForURI參數表示是否用request.setCharacterEncoding 參數對URL提交的數據和表單中GET方式提交的數據進行從新編碼,在默認狀況下,該參數爲false(Tomcat4.0中該參數默認爲true); URIEncoding參數指定對全部GET方式請求(包括URL提交的數據和表單中GET方式提交的數據)進行統一的從新編碼(解碼)的編碼。 URIEncoding和useBodyEncodingForURI區別是,URIEncoding是對全部GET方式的請求的數據進行統一的從新編碼(解碼),而useBodyEncodingForURI則是根據響應該請求的頁面的request.setCharacterEncoding參數對數據進行的從新編碼(解碼),不一樣的頁面能夠有不一樣的從新編碼(解碼)的編碼。因此對於URL提交的數據和表單中GET方式提交的數據,能夠修改 URIEncoding參數爲瀏覽器編碼或者修改useBodyEncodingForURI爲true,而且在得到數據的JSP頁面中 request.setCharacterEncoding參數設置成瀏覽器編碼。url