`
phpxiaoxin
  • 浏览: 251201 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jquery ajax 中文乱码

    博客分类:
  • js
阅读更多

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编码

分享到:
评论
5 楼 liuweihug 2014-05-22  
这个博客不错。都是干货。Jquery+asp.net 后台数据传到前台js进行解析的办法说明 - 
http://www.suchso.com/projecteactual/jquery-aspnet-back-js-parse-object-list.html
4 楼 maohua441883758 2011-04-07  
3 楼 lybykw 2010-07-26  
很巴适        的方案
2 楼 皇室勇少 2010-04-06  
而jsp设置了request.setCharacterEncoding("UTF-8");pageEncoding="UTF-8",就自动转换成了name=您好

虽然我现在也面临乱码问题? 但是上面那个问题我知道为什么?

当你用 request.setCharacterEncoding时

web服务器来利用 URLDecoder 来完成的
URLDecoder.decode("XXXXXX","GBK/编码解码方式 ")
1 楼 gepangtsai 2009-11-10  
将所有的地方都设为UTF-8就不会乱码:

1.JSP页面:
    contentType="text/html; charset=utf-8" ;
2.面面上的:
     &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;没有必要删除;
3.JS文件保存为UTF-8编码格式;
4.Servlet文件在输出数据之前进行编码设置:
    response.setContentType("text/html");
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");

相关推荐

    jquery+asp ajax 中文乱码问题解决文档

    ### jQuery + ASP AJAX 中文乱码问题解决方案 在开发基于jQuery和ASP的Web应用程序时,中文乱码问题可能成为困扰开发者的一大难题。特别是在使用Ajax进行前后端数据交互时,中文字符可能会出现乱码现象,影响用户...

    JQuery AJAX 中文乱码问题解决

    解决JQuery AJAX中文乱码问题的步骤如下: 1. **设置请求编码**:在发送AJAX请求时,确保请求头中的`Content-Type`设置为`application/x-www-form-urlencoded;charset=UTF-8`。对于JQuery,你可以这样做: ```...

    jquery的ajax编码乱码解决方案

    简单整理的乱码处理方案,jquery的ajax解决UTF-8以及GBK的问题

    Ajax中文乱码问题解决方案

    然而,在处理中文字符时,Ajax请求可能会遇到乱码问题,这主要是由于编码格式不一致或者处理不当导致的。本文将深入探讨Ajax中文乱码问题的成因,并提供一系列解决方案。 **一、问题原因** 1. **编码格式不一致**...

    GBK编码下jQuery_Ajax中文乱码解决方案

    ### GBK编码下jQuery_Ajax中文乱码解决方案 #### 背景介绍 在Web开发过程中,使用Ajax技术与服务器端交互数据时经常会遇到字符集编码的问题,尤其是在使用GBK编码的环境中,通过jQuery发起的Ajax请求往往会导致...

    jQuery中文乱码

    ### jQuery中文乱码完美解决方案 在处理Web应用中,尤其是涉及到多语言环境时,中文乱码问题时常困扰着开发者。本文将深入探讨jQuery在处理中文数据时遇到的乱码问题,并提供一系列有效的解决方案。 #### 一、理解...

    jQuery ajax方法传递中文时出现中文乱码的解决方法

    在使用jQuery的AJAX方法进行数据交互时,有时会遇到中文字符乱码的问题。这是因为浏览器、服务器和前端之间编码不一致导致的。本文将详细解释这个问题,并提供有效的解决方案。 首先,我们要理解AJAX(Asynchronous...

    jQuery Ajax过滤器

    本文将深入探讨jQuery中的Ajax过滤器及其在Ajaxform表单提交中的应用,以及如何解决可能出现的乱码问题。 首先,让我们理解什么是jQuery Ajax过滤器。在jQuery中,`ajaxSend`、`ajaxComplete`、`ajaxSuccess`、`...

    JQuery AJAX提交中文乱码的解决方案

    总结来说,解决JQuery AJAX提交中文乱码问题的关键在于确保客户端和服务器端字符编码的一致性。可以通过在AJAX请求中显式地设置字符集为UTF-8来解决,从而让服务器端能够正确地解码请求中的中文字符。这不仅适用于GB...

    java认证_Ajax中文乱码问题及解决方法.doc

    【Java认证:Ajax中文乱码问题及解决方法】 在Java Web开发中,使用Ajax进行异步数据交互时,经常会遇到中文乱码的问题。这主要涉及到字符编码的处理,特别是当Ajax请求发送的数据包含中文字符时。以下是两种常见的...

    ajax提交乱码

    在IT领域,特别是Web开发中,遇到“Ajax提交乱码”的问题是非常常见的,尤其是在处理中文或其它非英文字符集时。根据给定的文件信息,我们可以深入探讨如何使用Jquery来解决这一问题。 ### Ajax提交乱码问题的本质 ...

    Asp中用法JQuery的AJAX提交中文乱码解决方法_.docx

    AJAX提交中文乱码解决方法在Asp中使用JQuery AJAX(Asynchronous JavaScript and XML)是一种异步请求数据的技术,用于实现网页的局部刷新,而不需要重新加载整个网页。然而,在使用AJAX时,中文乱码问题经常会出现...

    jQuery Ajax传值到Servlet出现乱码问题的解决方法

    在开发Web应用时,我们经常会遇到前端与后端交互的问题,特别是使用jQuery的Ajax与Servlet进行数据通信时,乱码问题是一个常见的困扰。本文将详细解释如何解决jQuery Ajax向Servlet传递参数时出现的乱码问题。 首先...

    AJAX中文乱码总结

    中文乱码问题在AJAX应用中时有出现,主要表现为从服务器获取的数据在前端显示时出现乱码。本篇文章将对AJAX中文乱码问题进行深入探讨,并提供解决策略。 1. 乱码产生的原因 - 数据编码不一致:服务器返回的数据...

    jquery自动补全示例。包括后台,中文乱码解决JS

    本示例将涵盖如何使用jQuery实现自动补全功能,包括解决中文乱码问题以及常用属性配置。 ### 1. jQuery自动补全基本原理 jQuery 自动补全基于jQuery库,通过监听用户在输入框中的输入事件,实时查询预定义的数据集...

    jquery ajax post提交数据乱码

    "jquery ajax post提交数据乱码"这个问题主要是由于不同浏览器对数据编码方式的处理不一致造成的。当我们在Firefox下测试时,一切正常,但在Chrome或IE内核的浏览器上,用户可能会遇到乱码问题。这通常与页面的字符...

    jquery的ajax例子无错版

    标题“jquery的ajax例子无错版”表明这是一个关于jQuery AJAX用法的示例,且已针对可能出现的编码问题进行了处理,确保在utf_8和gb2312两种常见字符编码下都能正常显示,避免了乱码问题。在多语言网站或者处理中文...

    java+ajax处理乱码实例

    例如,使用jQuery的`$.ajax`方法: ```javascript $.ajax({ url: '/your-endpoint', type: 'GET', dataType: 'html', // 指定返回数据类型为HTML success: function(response) { var decodedHtml = ...

Global site tag (gtag.js) - Google Analytics