Ajax入門(二)——亂碼問題的解決

我們使用Ajax與服務器交互時,通常會傳些參數過去,這些參數有時後會是中文,這時,就有可能產生亂碼問題了。

解決方法一

使用一次encodeURI()方法。在javascript代碼中將請求訪問的URL地址使用encodeURI()方法轉換一次,在服務器端接收參數後在對參數重新編碼,例如在Java中,對接收來的參數(username)可以重新按UTF-8方式編碼:new String(request.getParameter("username").getBytes("ISO-8859-1"), "UTF-8"); 這樣就能解析到正確的中文參數了。

具體代碼爲:

var url = encodeURI("servlet/AjaxServlet?username="+username); //將請求的地址和參與編碼
(Java)服務器端代碼:
String old = request.getParameter("username").trim();
//注意,編碼格式要和html或jsp頁面的編碼格式相一致,如果爲gb2312,都應爲gb2312
 old = new String(old.getBytes("ISO-8859-1"), "UTF-8");

解決方法二(推薦)

方法一可以解決大部分瀏覽器的亂碼問題,可有時候並不是萬能的,有時候還是會亂碼,所以我推薦下面的方法。

方法一對請求的URL地址進行了一次重新編碼,而在方法二中需要進行兩次(不要問我爲什麼,我也不太清楚),也就是使用兩次encodeURI。

具體爲:

var url = encodeURI("servlet/AjaxServlet?username="+username);
url = encodeURI(url);
注意上邊的兩次encodeURI需要分開寫,不能寫到一句裏面,不能像這樣:var url = encodeURI(encodeURI("servlet/AjaxServlet?username="+username));這樣是沒有效果的,請讀者自行測試。

在服務器端則使用Java自己的api的URLDecoder的decode()方法對參數進行解碼。

代碼如下:

String old = request.getParameter("username").trim();		
old = java.net.URLDecoder.decode(old, "UTF-8");


發佈了41 篇原創文章 · 獲贊 30 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章