先分析一下出現亂碼的幾種情況:
資料在頁面顯示有亂碼
也就是伺服器獲取資料時沒有問題,在客戶端上顯示資料為亂碼,這種情況最好解決,只需修改頁面的編碼即可:
pageencoding="utf-8"
資料到伺服器後有亂碼
通常出現在表單提交資料給伺服器,伺服器獲取時得到的是亂碼,以tomcat為例,出現這種情況是因為沒有告訴伺服器以什麼編碼去獲取資料,假設頁面是以utf-8的編碼顯示的資料,你填寫時沒有問題,看起來是沒有問題,但是計算機只認識0和1,它在傳輸過程中是以二進位制的樣式進入到伺服器的,這時你的伺服器就不知道它之前是什麼編碼,如果你沒有指定,它就會按照老外的喜好,以iso8859-1的編碼去讀取,結果就出亂碼了.
這種情況的解決方式又要一分為二,為post和get方式,post解決方案很簡單,既然獲取時有亂碼,那麼在獲取之前,設定編碼即可:
request.setcharacterencoding("utf-8");
然後再使用傳統方法獲取:
string value = request.getparameter("value");
需要注意,這種設定只對post提交有效,如果是get則相對麻煩一點.因為亂碼是在呼叫方法getparameter()時出現的,方法內部的編碼肯定出現了問題,既然它不能自動使用utf-8,那我們就手動來**
if(request.getmethod().equalsignorecase("get"))
/**建立乙個request物件的包裝類:
1.編寫乙個類,實現與被增強物件相同的介面
2.在類中定義乙個變數,記住被增強物件
3.在類中定義乙個構造方法,接收被增強物件
4.覆寫想要增強的方法
5.對於不想增強的方法,直接呼叫被增強物件(目標物件)的方法
包裝設計模式"五步曲"
*/
private httpservletrequest request;
public myrequest(httpservletrequest request)
@override
public string getparameter(string name)
/*程式執行到此,請求方式必然為get
先獲取值,再進行手動轉換*/
string value = this.request.getparameter(name);
try catch (unsupportedencodingexception e)
return value; //返回
}
}
publicvoid destroy()
publicvoid init(filterconfig fconfig) throws servletexception
}
過濾器記得在web.xml中配置一把
過濾器+動態**
class characterfilter2 implements filter
string methodname = method.getname();
//如果傳遞進來的方法不是getparameter(),則不用增強
if(!methodname.equals("getparameter"))
//為get,並且是getparameter(),...
string value = (string) method.invoke(request, args);
if(value!=null)
return value;
}
}), response);
}
publicvoid destroy()
publicvoid init(filterconfig fconfig) throws servletexception
}
好了,還是記得要配置一把
至此,全站的亂碼問題得到解決,其實還有乙個更為簡單的方式,就是修改伺服器的配置檔案,但是如果伺服器不受自己控制,就沒用了.
徹底解決全站亂碼(過濾器)
出自 先分析一下出現亂碼的幾種情況 資料在頁面顯示有亂碼 也就是伺服器獲取資料時沒有問題,在客戶端上顯示資料為亂碼,這種情況最好解決,只需修改頁面的編碼即可 pageencoding utf 8 資料到伺服器後有亂碼 通常出現在表單提交資料給伺服器,伺服器獲取時得到的是亂碼,以tomcat為例,出現...
徹底解決程式亂碼問題
由於程式程式設計過程中存在眾多的編碼集,而這些編碼集又各自有自己的方法來表示乙個中文字元。由此,造成我們的程式顯示中文的時候亂碼。最多的是本來是中文,但結果顯示為問號?這篇文章從我碰到過的問題來從根本上解決亂碼的問題,反正我用這個方法是百戰百勝 嘎嘎 我們知道,在我們的中文系統中使用的是 gbk 編...
徹底解決Oracle中文亂碼
服務端字符集 作業系統字符集 nls lang字符集 select from nls database parameters locale export american america.al32utf8 en us.utf 8 american america.zhs16gbk create ta...