天天看點

JS中預設編碼導緻URL重寫時中文參數亂碼

問題場景:觸發GIS綁定的單擊事件時,通過window對象送出url,附帶“省份”,在頁面加載完成時參數出現亂碼,但位址欄中的參數正常?

問題解決:

網絡版本之一:通過IDE修改外聯的JS編碼格式

我的版本:

        由于我的JS量小,直接追在頁面最下邊了(懶得單獨寫js),是以另尋方法,經過測試,這種通過window送出的URL類似于記憶體中“字元到位元組到字元”的情況,

是以決定在目标頁面通過String自帶的轉碼方法,重新編碼後可行(js預設的編碼格式ISO-8859-1),是以“String s=new String(params.getBytes("ISO-8859-1"),"UTF-8");”即可解決目标頁面的接受中文參數亂碼的問題。

注:通過查閱,這種方式雖然可以擷取正确字元串,但是不被推薦,這種方法的編碼解碼大緻原理是,中文字元按照ISO8859-1輸出,一個漢字被拆成了兩個歐洲字元,然後又從新拼接成了正确的漢字,增加了一次編碼解碼的開銷,這種亂碼原因主要是應用伺服器的配置造成的,造成第一次解析按照ISO8859-1;

常見的解決方法是在tomcat的server.xml下的connetor屬性中增加URIEncoding或者useBodyEncodingForURI屬性。

引出場景:window對象送出URL的參數長度受限,而且由于我使用了iframe,目标JSP直接擷取部分參數,網絡版本解釋是iframe和JSP的結合不被祝福,這下有點懵了?

問題解決:

網絡版本之一:通過js為iframe動态增加表單,該變态設定n個隐藏域,這裡放參數,然後通過submit送出,這個方法據說可用,不過沒試。

我的版本:

        不過目前我采用了一個方法,還是可行的,就是源頁面中通過js将查詢參數拼接成json字元串,目标頁面通過第三方Jar和java來解析json字元串(也可以用js解析),不過我這裡統一用了jsp表達式,這時頁面就可以正常擷取到url參數。

繼續閱讀