Jsp中文亂碼小議
來源:互聯網
上載者:User
Jsp中文亂碼小議
-------郭鵬
Jsp是一個很熱門的話題,但讓大多數人都頭痛的是JSP頁面中的亂碼問題,筆者身有體會;曾為瞭解決中文亂碼問題鬱悶了好幾天,試了很多方法都不行。最後在JSP專業人士的協助下,終於解決。之後筆者曾對此做了一些小的研究。
首先我們先瞭解一下問題的原因。一般情況在在每個JSP頁的頭部都有這樣一條語句:
<% page contentType="text/html; charset=gb2312" %>這條語句決定了此頁面使用GB2312編碼形式,而在資料庫中一般用的是iso-8859-1字元集儲存資料. 而Java程式在處理字元時預設採用統一的ISO-8859-1字元集(體現Java國際化思想),所以在添加資料時,預設的字元集編碼是iso-8859-1,而頁面採用的是GB2312,所以就出現亂碼問題。為解決此問題應在儲存的時候把GB2312換轉成iso-8859-1。有此時候在讀出時也會出現亂碼,那麼只需反過來就可以了,把iso-8859-1轉換成GB2312。
具體執行個體歸納了以下幾點,也許會對大家有一些協助。
1、在建立JSP頁面時應該注意在jsp頁面的頭部加入一下代碼
<% page contentType="text/html; charset=gb2312" %>
此方法是解決JSP頁面顯示時的亂碼。
2、有時還需在HTML代碼中的<head></head>中加入這句
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
3、在bean中用的是iso-8859-1編碼,在jsp中一般用GB2312編碼,處理此類亂碼問題如下
String str=new String(strName.getBytes(“iso-8859-1”),”GB2312”);
具體用到此方法的地方為,當提交表單到bean(bean的功能是儲存資料到資料庫)表單提交後,資料庫中存入的資料確變成了????,因此在調用bean之前應對編碼進行轉換,方法:String str=new String(request.getParameter().getBytes(“iso-8859-1”),”GB2312”);
這樣,存入資料庫的資料庫的資料就可見了。
4、對於頁面間的參數傳遞也可以用這個方法來處理亂碼問題:
public String getStr(String str)
{
try
{
String temp_p=str;
byte[] temp_t=temp_p.getBytes("ISO8859-1");
String temp=new String(temp_t);
return temp;
}
catch(Exception e)
{}
return "null";
}
5、在表單定義時加上這個屬性有時也可以解決表單提交過程中出現的亂碼
<form enctype="multipart/form-data"></form>
6、提交英文字元能正確顯示,如果提交中文時就會出現亂碼。原因:瀏覽器預設使用UTF-8編碼方式來發送請求,而UTF-8和GB2312編碼方式表示字元時不一樣,這樣就出現了不能識別字元。解決辦法:通過request.setCharacterEncoding("gb2312")對請求進行統一編碼,就實現了中文的正常顯示。