关于 Ajax Post 的乱码问题处理方法
来源:互联网 发布:宝元lnc编程 编辑:程序博客网 时间:2024/06/05 11:52
今天写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格式的。
- 关于 Ajax Post 的乱码问题处理方法
- 关于ajax $.post() 返回乱码问题
- AJAX POST乱码问题
- Ajax的POST方法中文乱码问题解决
- jquery的$.ajax() $.post() $.getJSON() 等ajax方法时,中文参数乱码问题
- Ajax post 方法传递后,中文乱码问题!
- ajax post中文乱码问题
- AJAX在Post中文的时候解决乱码的方法。
- AJAX在Post中文的时候解决乱码的方法
- http 的post与get方法 以及处理中文乱码问题
- 处理post请求乱码问题
- 关于ajax的responseText乱码的问题
- 解决Ajax post中文乱码问题的三种方案
- 关于用ajax出现乱码的问题
- 关于AJAX/GET请求乱码的问题
- ajax返回中文乱码,servlet中的显示乱码,post提交的乱码问题,编码大总结
- Android,Post请求返回乱码问题的处理方式
- Get Post请求方式的乱码问题处理
- reids中内部数据结构->双向链表
- HDU-2672 god is a girl 斐波那契数列
- hdu 2818 Building Block
- hdu 2063 过山车(匈牙利算法)
- FlappyBird开发——后期完善
- 关于 Ajax Post 的乱码问题处理方法
- C#中实现多继承的方法作者:张宏杰 字体:[增加 减小] 类型:转载
- P51第20题
- LeetCode_Rotate Image
- hdu 2203 亲和串
- 利用 CocoaLumberjack 搭建自己的 Log 系统
- 八皇后问题 回溯法
- 杭电 HDU ACM 1420 Prepared for New Acmer
- spring MVC I18N使用