這篇文章主要介紹了ajax提交到servelt獲取參數有亂碼的解決方法,需要的朋友可以參考下
在這裡,假設讀者了解基本的 ajax 技術或更多。我僅僅闡述一個現象,一個解決方法;原因、 原理,同樣不清楚 …… 我們先從簡單的著手, servlet傳值到JSP頁面js 腳本中,利用腳本將相關值顯示在頁面。解決這個方向(servlet——javascript)的中文亂碼問題很簡單。只需要在 servlet中,添加一個 編碼設置: 代碼如下: response.setContentType("text/html;charset=UTF-8"); 而且JSP頁面編碼方式可以隨意設定,GBK、GB2312、UTF-8,當然 ISO-8859-1是不行的,至少你要在頁面顯示中文。 從js腳本傳中文到servlet,問題因xmlHttp對象open()方法中,傳值方式(GET、POST)不同,而分為兩種情況: 在介紹這個問題之前,先將兩種傳值方式區別展示一下: 假設傳遞值“軟件工程”,變量名為“selcol”。 1、GET方法: 代碼如下: function selectCol(){ createXMLHttpRequest(); var selcol = " 軟件工程 代碼如下: "; var url = "/emp/FindSpecial?selcol=" + selcol; xmlHttp.onreadystatechange = handleStateChange; xmlHttp.open("GET",url,true); xmlHttp.send(null); } 2、POST方法: 代碼如下: function selectCol(){ createXMLHttpRequest(); var selcol = "selcol=軟件工程"; var url = "/emp/FindSpecial"; xmlHttp.onreadystatechange = handleStateChange; xmlHttp.open("POST",url,true); xmlHttpxmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlHttp.send(selcol); } 如果使用GET方式傳遞,那麼我們在servlet拿值的時候,以如下方式轉編碼: 代碼如下: String selcol = new String(request.getParameter("selcol").getBytes("ISO-8859-1"), "GBK"); 轉GBK、GB2312都行,轉UTF-8不行! 這個時候也許你會很奇怪的發現,這兩個語句竟然同時出現: 代碼如下: response.setContentType("text/html;charset=UTF-8"); String selcol = new String(request.getParameter("selcol").getBytes("ISO-8859-1"), "GBK"); 個人是這樣理解的:第一句僅保證,從此servlet傳遞出去的數據編碼方式為UTF-8; 而後者則是將傳遞進來的數據轉化成GBK編碼的數據。方便與辨別和處理。 如果使用POST方式傳遞,那麼我們在servlet拿值的時候,同上,只是將編碼轉為UTF-8, 而這個時候,GBK和GB2312不行! 代碼如下: String selcol = new String(request.getParameter("selcol").getBytes ("ISO-8859-1"), "UTF-8");