java 位址列傳中文
阿新 • • 發佈:2019-02-16
1、位址列傳遞中文之前,將要傳遞的中文引數進行編碼,在服務端接收時再進行解碼。
如:
客戶端(傳參):
$(function(){
$('#search').click(function(){
window.location.href="user.do?type=search&userName="+encodeURI(encodeURI($('#s_userName').val()));
});
});
服務端(接收):
String userName = request.getParameter("userName");
userName = java.net.URLDecoder.decode(userName, "UTF-8");
注:為什麼用兩次:encodeURI()進行編碼,而在服務端只進行了一次解碼?
因為Tomcat伺服器會自動幫你做一次URLDecode,所以再加上你自己在程式碼裡面寫的URLDecode,一共就是兩個Decode了,既然要兩次Decode,當然就需要兩次Encode了。或許你會問,乾脆只Encode一次,然後在java程式碼裡不Decode,呵呵,這個是不行的,這其實也就是為什麼要進行Encode的原因吧
在客戶端對引數進行二次編碼,可以有效的避開“提交多位元組字元”的這個棘手問題。
因為第一次編碼,你的引數內容便不帶有多位元組字元了,成了純粹的 Ascii 字串。(這裡把編第一次的結果叫成 [STR_ENC1] 好了。[STR_ENC1] 是不帶有多位元組字元的)再編一次後,提交,接收時容器自動解一次 (容器自動解的這一次,不管是按 GBK 還是 UTF-8 還是 ISO-8859-1 都好,都能夠正確的得到 [STR_ENC1])然後,再在程式中實現一次 (Java中通常使用 java.net.URLDecoder(***, "UTF-8")) 就可以得到想提交的引數的原值。