我們使用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");