最近在工作中遇到,使用ajax get方式提交中文引數的時候出現亂碼,通過上網搜尋,總結出比較簡單的兩種解決方案:
第一種,由於tomcat預設的字符集是ISO-8859-1,修改Tomcat中的server.xml,在port為8080(也可以是不同的埠)的Connector中加入屬性: URIEncoding=“UTF-8” 就可以了。
這樣在ajax的url中引數,或type為get的時候在data中的引數,在後臺獲取都不會再後臺出現亂碼了。不用在後臺使用轉碼的程式碼都行了。
第二種,對需要傳遞的中文引數先進行兩次轉碼:
1.js檔案中使用encodeURI()方法。
1 //檢查版本名稱是否已經存在 2 function checkVersionName() { 3 var name = $(`#name`).val(); 4 //var re = /^[1-9]+[0-9]*]*$/; 5 /* if (!re.test(resourceId)) { 6 alert("ID請輸入數字"); 7 $(`#resourceId`).val(``); 8 return false; 9 } */ 10 var url = "${ctx}/mkt/appVersion/list?name=" + encodeURI(encodeURI(name)); 11 $.ajax({ 12 cache:false, 13 type: "POST", 14 async: false, 15 url: url, 16 dataType: "json", 17 contentType:`application/x-www-form-urlencoded; charset=UTF-8`, 18 success: function (data) { 19 if (data.page.count > 0) { 20 top.$.jBox.info("版本名稱:" + name + "已經存在"); 21 $(`#name`).val(``) 22 } 23 } 24 }); 25 }
有的時候是這樣(我遇到了):var url = “<%=bathPath%>/department/list?keyword=” + encodeURI(keyword);
2.在後臺中對傳遞的引數進行URLDecoder解碼
String keyword= URLDecoder.decode(request.getParameter(“keyword”),”UTF-8″);