前一阵子做公司的项目时出现了很多诡异的现象,令人百思不得其解,比如说在 JSP 页面中使用 AJAX 传输中文汉字到 JAVA 后台时出现了奇妙的乱码的问题。
在主流浏览器中处理的 AJAX 都是使用 UTF-8 来编码的,这样可以减少因为编码错误而产生的问题,但是,也会发生在浏览器、网页编码和后台程序编码都是用 UTF-8 的情况下也出现 AJAX 传输出现乱码。
为了方便文字的传输,需要使用函数 encodeURI() 对字符进行编码,接收部分需要使用 URldecode() 对字符进行解码。这两个个函数的功能是把字符串进行类似于“%E6%B1%89%E5%AD%97”和“汉字”之间进行转换。
关键问题在于:传输之前需要对字符串前端进行两次转码,对应 JAVA 端需要进行一次解码,看似不对称的原因是传输的时候 TOMCAT 会对字符串进行一次解码,因此为了对应,只能在前端页面中对字符串进行两次转换。
所以正确的处理方法是,在前端进行连续两次的编码:(JavaScript代码片段)
- xmlHttpReq.open("POST",requestURL,true);
- xmlHttpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
- xmlHttpReq.send(encodeURI(encodeURI(parameter)));
在 JAVA 处理接收到的数据时,需要转码一次:
- String userName = request.getParameter("userName");
- userName = URLDecoder.decode(userName,"UTF-8");
感谢你的赏识与认可
支付宝
微信支付
使用手机访问这篇文章
本文许可协议 © CC BY-NC-SA 4.0 转载请注明来源
- 上一篇: 每一个胖子都有一个苗条的内心
- 下一篇: 太子湾的郁金香开了
1 条评论
Loading...
其实还可以在tomcat配置文件中设置字符编码,有时代码中不好使就是这里的问题,或者开始就把server.conf文件的编码设定死