現在将常見的亂碼問題分為jsp頁面顯示中文亂碼、表單送出亂碼兩類。
1)jsp頁面中顯示中文亂碼
在jsp檔案中使用page指令指定響應結果的mime類型,如<%@ page language="java" contenttype="text/html;charset=gb2312" %>
2)表單送出亂碼
表單送出時(post和get方法),使用request.getparameter方法得到亂碼 ,這是因為tomcat處理送出的參數時預設的是iso-8859-1,表單送出get和post處理亂碼問題不同,下面分别說明。
(1)post處理
對post送出的表單通過編寫一個過濾器的方法來解決,過濾器在使用者送出的資料被處理之前被調用,可以在這裡改變參數的編碼方式,過濾器的代碼如下:
package org.lxh.myzngt.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;
public class encodingfilter implements filter {
private string charset = null;
public void destroy() {
}
public void dofilter(servletrequest req, servletresponse resp,
filterchain chain) throws ioexception, servletexception {
req.setcharacterencoding(this.charset);
chain.dofilter(req, resp);
public void init(filterconfig arg0) throws servletexception {
this.charset = arg0.getinitparameter("charset");
}
web.xml加入
<filter>
<filter-name>encoding</filter-name>
<filter-class>
org.lxh.myzngt.filter.encodingfilter
</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>spring charseter encoding filter</filter-name>
org.springframework.web.filter.charseterencodingfilter
<param-name>encoding </param-name>
(2) get方法的處理
tomcat對post和get的處理方法不一樣,是以過濾器不能解決get的亂碼問題 ,它需要在其他地方設定。
打開<tomcat_home>\conf目錄下server.xml檔案,找到對8080端口進行服務的connector元件的設定部分,給這個元件添加一個屬性:uriencoding="gbk"。修改後的connector設定為:
java代碼
enablelookups="false" redirectport="8443" acceptcount="100"
connectiontimeout="20000" disableuploadtimeout="true"
uriencoding="gbk" />
* 注意修改後重新啟動tomcat才能起作用。