jquery ajax 中文乱码
结论:
jquery 1.3.2 ajax对编码问题进行过部分(见后面补充1
)处理,解决方案以jsp为例子:
ajax提交数据给jsp:ajax所在页面无任何要求,jsp页面需作两方面处理。
1.<%@page
contentType="application/json" pageEncoding="UTF-8"%>或<%@page
contentType="application/json" pageEncoding="gb2312"%>
2.处理request.setCharacterEncoding("UTF-8")
详细说明:
之所以会乱码,原因很简单,两个人对话的时候,a说中文,b用英文接受,于是乎乱码矣!
所以当出现乱码搞清楚谁是a谁是b很重要,然后a说话的时候让b知道应该用什么语言接收,或者b以固定的方式接收,a用b接收的语言去说,这样就万事ok了。
所以下面分成两部分去分析。一个是ajax单纯获取网页信息的情况,一个是ajax单纯往jsp等提交数据的情况,细的来说,这里种情况有分两种情况即post和get
ajax单纯抓取网页
a:请求的页面,b:jquery ajax
这里为什么a是请求的页面,而b是jquery ajax呢?虽然是ajax向页面要东西,
但是也可以理解为a(页面)要告诉ajax的内容是什么,于是乎a说,我告诉你b(jquery ajax),我的内容是......并且内容的语言是gb2312的,你来接受吧。
于是b就根据他的编码格式接收了a的内容,于是就没乱码了。看一下下面的表格
当前页面编码
js
请求页面编码
中文乱码
解决方安/说明
gb2312 |
jquery ajax 获取数据 |
gb2312 |
是
|
jsp:<%@page contentType="application/json" pageEncoding="gb2312"%>这里用的json作测试,与text/html应该一样
aps:Response.Charset="gb2312"(参照网络未测试)
php:header("Content-Type:text/html; charset=gb2312");(参照网络未测试)
html:未解决 |
gb2312 |
jquery ajax 获取数据 |
utf-8 |
否 |
|
utf-8 |
jquery ajax 获取数据 |
utf-8 |
否 |
|
utf-8 |
jquery ajax 获取数据 |
gb2312 |
是
|
jsp:<%@page contentType="application/json" pageEncoding="gb2312"%>这里用的json作测试,与text/html应该一样
aps:Response.Charset="gb2312"(参照网络未测试)
php:header("Content-Type:text/html; charset=gb2312");(参照网络未测试)
html:未解决 |
首先说明,上面说的页面编码,是指文件字符编码,而不是html里面<meta>标签内的charset=gb2312。根据以上数据显示:ajax抓去网页的时候,乱码问题与当前页面(ajax所在页面)无关。
对于普通的html文件,乱码不在于当前ajax所页面而在于被抓去的页面,如果被抓取的页面为gb2312就必须在文件头声明:pageEncoding="gb2312",
ajax单纯提交数据到jsp页面(post)
a:ajax, b:jsp
提
交数据的时候,jquery使用ajax方法,type:
"post",data:{test:"hello你好"},jsp页
面:pageEncoding="gb2312"/pageEncoding="UTF-8"都可以,根据具体返回的需要了。这里建议大家debug的时
候看变量是否乱码,因为如果看jsp页面,实际上又增加了一个编码过程
ajax单纯提交数据到jsp页面(get)
这
里需要注意,type: "get",的时候,由于涉及到url的编码问题(详细见下面的参考文章:深入浅出URL编码),
所以需要在jsp接收数据的时候加下面这句:request.setCharacterEncoding("UTF-8");
注意这里一定要是UTF-8,而pageEncoding参数无论是UTF-8还是gb2312都可以。(因为这个pageEncoding主要对请求后
返回的内容编码起作用) 而对于java
web开发,request.setCharacterEncoding("UTF-8")(注:根据“深入浅出URL编码”这个设置应该针对post设
置而不是get,但在我测试的时候这样设置的确在post的时候不需要而get的时候就可解决乱码问题。)可以使用filter,或者struts2进行
全局解决, 根据网上的说法,好像还可以设置tomcate的配置解决这个问题。
当然有一些解决方法是局部进行转码和解码,如js部分通过:escape或encodeURI方式将中文编码,然后到了jsp/php/asp再通过一定方法实现对该数据的解码,这种局部的方案,只能作临时解决方案。
我以上所说可能有很多漏洞,甚至错误,但是我的确都在suse linux/firefox 3 默认utf8编码 jdk 1.6.10
glassfish v2
环境下实验过。
之所以写出来,是给大家一个参考,或者说一个提示,如果大家这样作,还是有乱码,请变通尝试其他方法,参考下面给出的参考文章列表。另外编码问题还涉及到不同的浏览器不同的设置。如果搞明确了一些编码设置,请过来批评,我好改正,谢谢:)
更正补充:
1.jquery ajax 对data参数有如下判断处理:
if (s.data && s.processData && typeof s.data != "string")
s.data = jQuery.param(s.data);
就是说他检查data参数是否是string,并且processData是否为true,此参数默认为true
jQuery.param(s.data)内部会作的处理就是:将数据进行encodeURIComponent(key/value)编码后组装。
所以当 data = {"name":"你好"},processData = true
服务器将接收到:name=%E4%BD%A0%E5%A5%BD
令我不解的是,当我用jersey做的rest web service通过post接收的时候接收到name=%E4%BD%A0%E5%A5%BD,就是说post什么接收到了什么,这个很正常。
而jsp设置了request.setCharacterEncoding("UTF-8");pageEncoding="UTF-8",就自动转换成了name=您好
不知道这个转换过程是谁做的?请明白的人帮忙解释一下
参考文章:
Ajax中文乱码原因分析及解决方案 [转]
深入浅出URL编码
分享到:
相关推荐
jquery+asp ajax 中文乱码问题解决文档
JQuery AJAX 中文乱码问题解决,需要的朋友可以参考一下
简单整理的乱码处理方案,jquery的ajax解决UTF-8以及GBK的问题
GBK编码下jQuery_Ajax中文乱码解决方案
本文实例讲述了jQuery ajax方法传递中文时出现中文乱码的解决方法。分享给大家供大家参考,具体如下: 使用jQuery的ajax方法,在传递中文时出现中文乱码,按照以前的方法,修改了jquery文件中的ajaxSetting也不好使 ...
用jQuery实现Ajaxform表单提交! 实现过滤乱码! 解决乱码!
JQuery是一个非常优秀的框架,在特定场合下使用JQuery提交数据,相当的方便快捷。 但是,在处理一个GB2312编码的网站AJAX提交时,中文数据却成了乱码。
Jquery解决异步提交ajax提交乱码问题
Asp中用法JQuery的AJAX提交中文乱码解决方法_.docx
最近有朋友反映使用jquery.ajax调用返回json时出现中文乱码,遇到此问题,非常棘手,下面小编帮大家解决JQuery ajax 返回json时出现中文乱码问题,感兴趣的朋友跟着一起了解了解吧
最近在学jquery ui,在做一个小功能的时候需要将前台的值获取到,通过Ajax传递给Servlet,然后再在返回数据结果,但是在Servlet接受参数的时候,通过后台打印,发现接受乱码,代码示例如下: public void doGet...
主要介绍了JQuery发送ajax请求时中文乱码问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Asp中使用JQuery的AJAX提交中文乱码解决方法,使用Asp中的unescape() 和escape() 函数即可解决乱码问题,需要的朋友可以参考下
今天发现在使用jquery ajax.post提交数据时会发现数据在ff正常,但在chrome与ie浏览器中post过去的数据全部是乱码
用jquery ajax asp实现的搜索引擎的输入输出 功能点: (1)读写cookie (2)在js中获取asp请求中的数据 (3)使用jquery ajax实现的翻页功能 (4)解决通过ajax转发后,搜索结果列表中文乱码的问题
本篇文章主要是对jquery ajax传递中文参数乱码问题及解决方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助