關於Ajax傳輸字符串到后台呈中文亂碼的解決方法
框架:springboot+maven+Mybatis
使用軟件:Intellij IDEA 2018.2.6
前端:jquery-1.11.3.min.js
問題:在使用Ajax傳輸一個字符串的時候,前台顯示出中文字樣,后台卻是亂碼+“=”,嘗試了“produces = "text/html;charset=utf-8"”,無果:
<input type="text" id="uid"/> <div id="message"></div> </body> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> <script type="text/javascript"> $("#uid").blur(function () { var uid = $(this).val(); // var uid = encodeURI($('#uid').val(),"utf-8"); // data = {"goods_name":uid}; $.ajax({ url:"/async", data:uid, type:"POST", ContentType:"application/x-www-form-urlencoded;charset=UTF-8", success:function (data) { alert("返回結果集="+data) } }) }) </script>
解決方法:
在controller層,使用URLDecoder.decode()對亂碼進行解碼,用substring除去最后的“=”:
import java.io.IOException; import java.net.URLDecoder; public List<Map<String,Object>> async(@RequestBody String word) throws ExecutionException, InterruptedException, IOException {
MultiValueMap<String, String> paramMap = new LinkedMultiValueMap<>(); String goods_name = URLDecoder.decode(word, "UTF-8"); paramMap.add("goods_name", goods_name.substring(0,goods_name.length()-1));
這里轉發兩個網址,分別詳細講解了“使用 URLDecoder 和 URLEncoder 對中文字符進行編碼和解碼” 和 “substring常用的兩種方法”:
https://blog.csdn.net/justloveyou_/article/details/57156039
https://blog.csdn.net/hehuihh/article/details/79033047