微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

今天写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格式的。

原文地址:https://www.jb51.cc/ajax/163577.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐