URL參數(shù)中有中文值,傳到服務(wù)端,在用request.getParameter()方法,得到的常常會是亂碼。
這將涉及到字符解碼操作,我們在應(yīng)用中常常會用new String(fieldType.getBytes("iso-8859-1"), "UTF-8");等類似的方法去解碼。但這種方式受具體應(yīng)用環(huán)境限制,往往在應(yīng)用部署環(huán)境發(fā)生改變時,還會出現(xiàn)中文亂碼。
在這里介紹一種解決方法,可以在任何應(yīng)用部署環(huán)境下通用。此方法分兩步:
1、在客戶端用escape(encodeURIComponent(fieldValue))方法編碼,例如:
title=escape(encodeURIComponent(title)); //這是js里的函數(shù)
url="<%=request.getContextPath()%>/print/printList!printTable.action?title="+title;
2、在服務(wù)端用java.net.URLDecoder.decode(getRequest().getParameter("title"),"UTF-8"),進行解碼。
-----------------------------------------------------------------------------
parent.window.location.href 和 iframe中src的亂碼問題。
要在這兩個url地址中傳中文,必須加編碼,然后再解碼。
編碼:encodeURI(encodeURI("包含中文的串"))
解碼:java.net.URLDecoder.decode("需要解碼的串","utf-8");
encodeURI方法是正確的,只是需要使用兩次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文編碼成%xy的格式,第二次是對%xy中的%進行編碼,%編碼成%25。整個傳參過程大體應(yīng)該是:提交頁面使用encodeURI(encodeURI("中文"))編碼,把最后的編碼結(jié)果%25xy傳遞給處理頁面的過程中,瀏覽器獲取URL地址(注意openModelDialog方法,瀏覽器獲取不到參數(shù)編碼)后解碼成%xy,然后把%xy傳遞給處理頁面,處理頁面使用URLDecoder.decode(request.getParameter("參數(shù)名"),"UTF-8");完成解碼。
總結(jié):
1、漢字出現(xiàn)在URL路徑部分的時候不需要編碼解碼;
2、使用encodeURI進行2次編碼;
3、在openModelDialog()打開的模式窗體里沒辦法用request.getParameter正確獲取參數(shù);
posted on 2011-05-11 10:05
孤飛燕 閱讀(1950)
評論(0) 編輯 收藏 所屬分類:
Java