js傳值中文亂碼問題
(一)解決中文亂碼問題
對於中文亂碼問題,首先要清楚在哪個環節發生了中文亂碼,前臺向後臺傳值發生亂碼,還是後臺向前臺傳值發生亂碼,是哪種型別js,url還是jsp。
可以通過除錯,觀察具體亂碼變數值,找到具體位置,進行解決。
(二)HTML解碼編碼工具類
1、java.net.URLDecoder類
HTML格式解碼的實用工具類,有一個靜態方法:public static String decode(String 變數名,String 編碼格式);給變數指定解碼。
2、java.net.URLEncoder類
HTML格式編碼的實用工具類,有一個靜態方法:public static String encode(String 變數名,String 編碼格式);給變數指定編碼。
注意:以上兩個類:一個是解碼,一個是編碼,區分好。
3、JavaScript的編碼函式
encodeURI(String URIstring):把字串作為 URI 進行編碼。
(三)解決js傳值中文亂碼
問題:js在url中傳值,前臺和後臺編碼不一致,導致中文亂碼
第一種方法:
前臺:js程式碼使用encodeURI()函式:url = encodeURI(url);注意:這裡是整個URL地址,也可以是具體亂碼變數。
後臺:java程式碼String linename = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
第二種方法:
前臺:jsp程式碼對url使用兩次encodeURI()函式:url=encodeURI(encodeURI(url));//用了2次encodeURI
後臺:java程式碼使用java.net.URLDecoder.decode(String 變數,String 編碼);對指定變數解碼
例項:
前臺:
var yhdh = encodeURI(yhdh);
top.Dialog.open({
URL : "user.do?ywtype=loadXq&type=update&user.yhdh=" +encodeURI(yhdh), //兩次使用encodeURI()函式(這是js函式)
後臺:
try {
String searchtext
= java.net.URLDecoder.decode(userForm.getUser().getYhdh(),"UTF-8"); //進行解碼,會拋異常,直接捕獲即可。
userBean.setYhdh(searchtext);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}