加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于 Ajax Post 的乱码问题处理方法

发布时间:2020-12-16 02:03:37 所属栏目:百科 来源:网络整理
导读:今天写JSP程序时遇到一件奇怪的事,在我的JSP页面和后台编码(包括Tomcat服务器的编码)都设置为 UTF-8 的情况下,使用Ajax 进行Post 操作时仍然出现了中文乱码的情况。 相关编码设置如下: JSP页面: ?xml version="1.0" encoding="UTF-8" ?%@ page languag

今天写JSP程序时遇到一件奇怪的事,在我的JSP页面和后台编码(包括Tomcat服务器的编码)都设置为 UTF-8 的情况下,使用Ajax 进行Post 操作时仍然出现了中文乱码的情况。

相关编码设置如下:

JSP页面:

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
myEclipse 编码设置:


Tomcat 编码设置:



前端进行post操作的代码如下:

var xhr = getXMLHttpRequest();
xhr.open("post","conne",true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded;");
xhr.send(value);

后台直接接收:

 request.getParameter("value");

奇怪的事情就发生了,使用 Firefox 提交的数据确实是按中文显示的,但是 Chrome 浏览器提交的数据却是乱码。

于是我换了个方法,尝试在服务端使用:

String(request.getParameter("value").getBytes("ISO-8859-1"),"utf-8");
结果 Chrome 浏览器提交的中文显示正常了,但是 Firefox 浏览器提交的中文却变成了乱码。问题看起来似乎和浏览器的默认编码有关系....

于是我参考一篇博客:http://www.cnblogs.com/qiuyi21/articles/1089555.html

这里的解决方法是:在客户端对上传的数据使用js 进行两重编码,然后在服务端只需要对数据进行一次解码操作即可。

代码如下:

客户端:

encodeURIComponent(encodeURIComponent(value));
服务端:
URLDecoder.decode(request.getParameter("value"),"utf-8");
问题解决了!


不过经过一番探索,我发现引起这个问题的关键原因并不在于浏览器,而是因为我的 Servelet 没有设置编码的缘故。

所以,只需要在 Servelet 的 doPost 函数中加一句:

request.setCharacterEncoding("utf-8");

感觉 Servelet 实质也相当于生成一个页面,如果没有指定编码的值,还是跑到默认的ISO-8859-1的编码上去了,所以此处指定之后,浏览器们就统一了。所以此处推荐这种方案。

另外根据我的经验,只要前台和后台同时使用UTF-8编码,一般是不会出现乱码问题的。而不是像某些教科书上写的非得手动将所有的编码的地方都硬改成“GB2312”或者“GBK”。事实上稍微懂一些编码的知识就会知道UTF-8编码其实是包含中文字符集的,而且它还支持多国语言和字符,扩展性和兼容性更好。我们平时在电脑上遇到的文件乱码问题多半都是 ANSI 编码惹的祸,不信你新建一个文本文档,然后点击“另存为”,看看它的编码是不是ANSI!一些编译器打开文件的时候按照UTF-8或者GBK等等其他默认编码打开就会出现乱码,所以建议必要的时候还是手动将文档另存为UTF-8格式的。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读