關於AJAX採用POST方法提交到Java後台出現亂碼的問題,網上有很多都是在伺服器端設定request.setcharacterencoding("utf-8")這種方法解決或者是把所有前台後台編碼都改成UTF-8,但是在自己的項目上使用此方法不能實現(後來分析有可能是使用編碼過濾器的原因)。經過幾天摸索終於搞定:
1、ajax提交時採用escape或encodeURI方法。必須使用2次
2、後台java用java.net.URLDecoder類的decode方法。
前台頁面局部代碼:
/**
* marging是一個js對像用於承載頁面部分功能和參數
* xmlHttp是改寫後的AJAX對像,屬性paramString為post方式發送到服務端的參數
* 前台,後台頁面都採用的GBK編碼,使用了編碼過濾器
*/
xmlHttp.paramString="mName="+marging.mNames;
//參數經過2次encodeURI編碼
xmlHttp.paramString=encodeURI(xmlHttp.paramString);
xmlHttp.paramString=encodeURI(xmlHttp.paramString);
//發送儲存請求
var xmlReq=xmlHttp.getTextByPost("mailMerginged.jsp");
後台頁面代碼:
/**
* 當調用request.getParameter()函數時,會自動進行一次URI的解碼過程
* 調用時內建的解碼過程會導致亂碼出現。而URI編碼兩次後,request.getParameter()函數
* 得到的是原資訊URI編碼一次的內容。再用可控的解碼函數java.net.URLDecoder.decode()
* 就可解出原始的正確的資訊。
*/
String mName=java.net.URLDecoder.decode(request.getParameter("mName"),"UTF-8");