Url傳遞參數和接收參數時的中文亂碼處理

今天一個朋友又問及url傳遞中文參數,jsp接收參數時的亂碼處理問題。

一、問題如下:

 Js提交代代碼:

Var  name = "老羅";

var url = "testList.jsp?userName="+name;

Jsp中接收參數代碼:

String userName = request.getParameter("userName");

得到的userName結果成了“?

二、我給他的解決辦法如下:

 Js提交代代碼:

Var  name = "老羅";

var url = "testList.jsp?userName="+name;

   url=encodeURI(url); 

   url=encodeURI(url); 

Jsp中接收參數代碼:

String  userName = request.getParameter("userName");

   userName = java.net.URLDecoder.decode(userName ,"UTF-8");   

得到的userName結果:“老羅”

 

在這裏,爲什麼要在客戶端對字符串重複編碼兩次呢
    因爲第一次編碼,參數內容便不帶有多字節字符了,成了純粹的 Ascii 字符串。 

再編一次後,提交,接收時容器自動解一次
然後,再在程序中實現一次 java.net.URLDecoder(***, "UTF-8")) 就可以得到想提交的參數的原值。

其實,一般情況下,  
   encodeURI使用的是 UTF-8 編碼規則來編的.
如果 request.getParameter(paramName) ,容器也按 UTF-8 解的話,是正確的根本無須在客戶端進行二次的 encodeURI(...)


如果 request.getParameter(paramName),容器沒有按 UTF-8 解的話結果只有一個,就是亂碼!
容器按什麼編碼來解碼,決定於 request.setCharacterEncoding(***) 或者 服務器程序配置.

在 jsp 程序中,能夠 request.setCharacterEncoding("UTF-8"), 並且 修改服務器配置,讓容器在解 GET 提交的參數時,使用 UTF-8.
客戶端提交前不用二次編碼接收時,也只要直接 request.getParameter(paramName) 即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章