1. 程式人生 > >jsp資料提交至servlet中文亂碼

jsp資料提交至servlet中文亂碼

【出現亂碼的原因】   

     首先無論使用get方式提交,還是post方式提交,如果引數中包含中文,瀏覽器都會使用當前瀏覽器編碼對其進行URL編碼,然後伺服器端再進行URL解碼,如果瀏覽器提交資料的編碼和伺服器接收資料的編碼格式不一致,那麼就有可能產生中文亂碼。在ie中可以通過選單欄--檢視---編碼檢視編碼格式。

【post方式提交亂碼解決方法】

  對於表單中POST方式提交的資料,只要在接收資料的JSP中正確request.setCharacterEncoding引數,即將對客戶端請求進行重新編碼的編碼設定成瀏覽器編碼,就可以保證得到的引數編碼正確。

request.setCharacterEncoding(myEncoding );

    request.setCharacterEncoding(myEncoding)的作用是設定對客戶端請求進行重新編碼的編碼。該方法用來指定對瀏覽器傳送來的資料進行重新編碼(或者稱為解碼)時,使用的編碼。

    另外還有一點需要注意:

    request.setCharacterEncoding(myEncoding)和response.setCharacterEncoding(myEncoding )

 的區別,前者是瀏覽器提交到後臺時對提交的資料設定編碼,後者是後臺傳送資料到瀏覽器時對

對於傳送資料,設定編碼。

【get方式提交亂碼解決方法】(參考湯陽光OA)

    方案一:

    str = new String(str.getBytes("ISO-8859-1"),"UTF-8"),這種方式的大概意思,道說是先把str按照“ISO-8859-1”編碼格式拆分成陣列,再轉為GBK格式組合起來。(這種方式有的情況下不能轉換好。不推薦)

方式二:

tomcat伺服器中修改server.xmlURIEncoding="utf-8",因為在Tomcat5.0中和以後,預設情況下使用ISO-8859-1對URL提交的資料和表單中GET方式提交的資料進行重新編碼。

方式三(不依賴Tomcat的配置,推薦):

  瀏覽器中兩次URL編碼。

  伺服器中自己再做一次

URL解碼。

因為引數中包含中文,瀏覽器都會使用當前瀏覽器編碼對其進行URL編碼,然後伺服器端再進行URL解碼。如果首先將中文編碼,然後再傳到伺服器端那麼就不會出現亂碼錯誤了。

wKiom1PwOrOiDWTlAABYji5o7is217.jpg


jsp頁面程式碼如下:

wKioL1PwPQSwRxcEAACbUukXLXo126.jpg

var name=encodeURI($('#inputJobName').val());
	var name=encodeURI(name);
	
	$.ajax({
		 url:"/Newbigdata/NewJobFromTableServlet?jobname="+name,
		
        success: function(data) {

      	  window.location=data;
        },
        error:function(){
      	  alert('error!');
        }
      	  
    }); 

request.setCharacterEncoding("UTF-8");
String jname=URLDecoder.decode(request.getParameter("jobname"),"utf-8");