首页 / 技术 / 正文

JSP中通过AJAX传输中文字符时出现乱码的解决方法

2016年03月24日 1 条评论 ... 技术 /

前一阵子做公司的项目时出现了很多诡异的现象,令人百思不得其解,比如说在 JSP 页面中使用 AJAX 传输中文汉字到 JAVA 后台时出现了奇妙的乱码的问题。

在主流浏览器中处理的 AJAX 都是使用 UTF-8 来编码的,这样可以减少因为编码错误而产生的问题,但是,也会发生在浏览器、网页编码和后台程序编码都是用 UTF-8 的情况下也出现 AJAX 传输出现乱码。

为了方便文字的传输,需要使用函数 encodeURI() 对字符进行编码,接收部分需要使用 URldecode() 对字符进行解码。这两个个函数的功能是把字符串进行类似于“%E6%B1%89%E5%AD%97”和“汉字”之间进行转换。

关键问题在于:传输之前需要对字符串前端进行两次转码,对应 JAVA 端需要进行一次解码,看似不对称的原因是传输的时候 TOMCAT 会对字符串进行一次解码,因此为了对应,只能在前端页面中对字符串进行两次转换。

所以正确的处理方法是,在前端进行连续两次的编码:(JavaScript代码片段)

  1. xmlHttpReq.open("POST",requestURL,true);  
  2. xmlHttpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");  
  3. xmlHttpReq.send(encodeURI(encodeURI(parameter))); 

在 JAVA 处理接收到的数据时,需要转码一次:

  1. String userName = request.getParameter("userName");  
  2. userName = URLDecoder.decode(userName,"UTF-8"); 

1 条评论

Loading...
  1. iwwenbo

    其实还可以在tomcat配置文件中设置字符编码,有时代码中不好使就是这里的问题,或者开始就把server.conf文件的编码设定死

    2016-04-23 [回复]

发布评论