1. 程式人生 > >js傳值中文亂碼問題

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();
}