暫時解決的中文問題

mouqj發表於2007-09-01
使用JSP容器,Tomcat,
1,從資料庫讀出欄位內容,顯示亂碼。
問題:懷疑是驅動問題。
暫時解決:在JSP頁面中嵌入函式:

public String getCrtStr(String str){
return new String(str.getBytes("ISO-8859-1"),"gb2312"); //有效
}

%>

...

materialName = getCrtStr(materialName); //有效

...

%>

2另一種亂碼現象,在servlet中

String subject=request.getParameter("subject");//接收一箇中文
String content=request.getParameter("content");//接收一箇中文

結果在後臺列印為亂碼

嘗試1,使用new String(str.getBytes("ISO-8859-1"),"gb2312"); 轉為GB2312格式,失敗

嘗試2,使用new String(str.getBytes("GB2312"),"8859_1");轉化為8859_1格式,仍然失敗

嘗試3,在接收引數前,呼叫request.setCharacterEncoding("GBK");失敗,

嘗試4,在接收引數前,呼叫request.setCharacterEncoding("utf-8");成功!

注意到所有的JSP檔案都是utf-8格式,JSP頁面中編碼都為utf-8,因此嘗試4得以成功。

不過這種格式似乎並不值得推薦,ansi格式外加GBK編碼更加值得使用吧。

3,儘管在插入資料庫前中文字元已經,但是執行insert語句之後,資料庫中出現中文字元亂碼!

在查詢分析其中執行

insert into article(CategoryID,Subject,Content) values(1,'你好','你好');

資料庫中出現亂碼,此時在中文字元前加N,則可以解決這個問題

insert into article(CategoryID,Subject,Content) values(1,N'你好',N'你好');OK,因此,解決servlet中insert亂碼問題,只需要修改原來的語句(加N),最終形式如下:

String sqlStr = "insert into article(CategoryID,Subject,Content) values("+
classID+",N'"+
subject+"',N'"+
content+"')";

4,對於nvarchar和varchar型別的欄位,中文問題可以解決,但是text型別的欄位,始終不得其解,只能暫時繞過,有待研究。

另外把一個UTF8編碼的JSP存為ANSI格式,則除了資料庫取出的文字,其餘都會產生亂碼。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11049438/viewspace-967499/,如需轉載,請註明出處,否則將追究法律責任。

相關文章