闲话Ajax传递中文出现乱码

话说前两天吧,一个项目中因为要通过ajax调用ashx(一般处理程序),并传递一连串的参数,这参数里面包含了一些中文,其实之前一直在使用,没发现什么问题,但是这两天突然出现中文转换乱码,出现这样的问题完全是由于对标准的不熟悉,至于网上其它人说的修改jquery文件,使用 escape、encodeURI、encodeURIComponent方法,也许可行,但经我测试并未解决问题,可能环境不同也会造成此问题,在这里我不表示反对,除了以后所述,我还测试了其它的方法,比如在requert前后更改编码类型,采用不序列化的方法等,思考的和测试的时间花了不少,说实话,最近园子里的气氛我不太喜欢,不过看到网关关于这问题很少有人在这个角度去分析,所以我还是发首页了。

1、实际的项目代码我就不写了,写点测试的,效果一样,以下是javascript代码。当然应用了JQuery:

1function test() {
2    var content ="{\"Content\":\"*中国人*\"}";
3    $.post("../ashx/Handler1.ashx",
4        {
5            Content: content
6        },
7        function(data) {
8            alert(data);
9        }, "json");
10}

2、后台序列化代码,应用了.net framework3.5 的新功能 DataContractJsonSerializer(网上资料很多,这类的作用我就不用说了)

1  public void ProcessRequest(HttpContext context)
2        {
3            context.Response.ContentType = "text/plain";
4            string conten = context.Request["Content"];
5            try
6            {
7                DataContractJsonSerializer dcs = new DataContractJsonSerializer(typeof(News));
8                MemoryStream ms = new MemoryStream(Encoding.GetEncoding("gb2312").GetBytes(conten));
9                News news = (News)dcs.ReadObject(ms);
10                string c = news.Content;
11            }
12            catch (Exception ex)
13            {
14                throw ex;
15            }
16        }

分析:

3、上面的这段代码注定要抛出一个序列化字符串包含无效字符的异常。

4、但是当我在客户端传递的:“中国人”改成“中国人民”后,异常消失。

5、为什么呢为什么呢?原因说起来相当的简单和傻冒,为什么是奇数字符异常而偶数却不会?说起来这历史相当遥远,却是由于javascript的编码造成,或者也可以说是项目的编码环境造成的,javascript默信采用的"utf-8" ISO 1的编码,将所有中文字符转换为3个字节,而utf-8及gb2312却是将所有中文字符转换为2字节,这一转手,得,情况突变,3字节变成2字节,乱码随之而来。

6、其实是因为在项目中应用的是:gb2312编码,在web.config中更改即可,其实只要更改requesEncoding的编码即可。

<system.web>
<globalization requestEncoding="utf-8" responseEncoding="gb2312" fileEncoding="gb2312"/>
</system.web>

7、其实在这之前,我检查了JQuery的编码应用,它里面并没有规定使用什么样的编码,不需要去更改源文件,这是jquery-1.3.2.js和jquery-1.3.2-vsdoc2.js中的设置。

位于jquery-1.3.2.js中的3362行,当然,我没有完全剪切出来。

1ajaxSettings: {
2        url: location.href,
3        global: true,
4        type: "GET",
5        contentType: "application/x-www-form-urlencoded",
6        processData: true,
7        async: true
8}

时间: 2024-11-01 13:29:22

闲话Ajax传递中文出现乱码的相关文章

jquery ajax传递中文参数乱码问题及解决方法说明

 本篇文章主要是对jquery ajax传递中文参数乱码问题及解决方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 jQuery传递中文参数乱码,原因是默认的传递方式没有采用UTF-8,所有我们可以在传递参数的时候对参数进行编码,然后再操作,代码如下,红色的代码为传递的参数,已标注    代码如下: smsubmitclick = function(){    $(document).ready(function(){        var name = $("#txt_name&q

escape函数解决js中ajax传递中文出现乱码问题_javascript技巧

本文实例讲述了escape函数解决js中ajax传递中文出现乱码问题,分享给大家供大家参考.具体方法如下: 一.问题描述: 本来网页特效中的escape()是将中文按iso-8859-1字符集进行url编码的,那样通过 request.getparameter()是能直接获取到请求参数的,但后来的javascript将escape()换成了unicode字符集编 码,如此一来,在jsp教程和servlet中就没法直接拿到请求参数了,具体原因我也不知道. 二.解决办法: 1.首先对中文字符进行两次

jquery ajax传递中文参数乱码问题及解决方法说明_jquery

jQuery传递中文参数乱码,原因是默认的传递方式没有采用UTF-8,所有我们可以在传递参数的时候对参数进行编码,然后再操作,代码如下,红色的代码为传递的参数,已标注 复制代码 代码如下: smsubmitclick = function(){   $(document).ready(function(){       var name = $("#txt_name").val();       var type = $("#seltype option:selected&q

JQuery的Ajax中Post方法传递中文出现乱码的解决方法_jquery

本文实例讲述了JQuery中Post传递中文出现的解决方法,即乱码ajax与jquery.ajax中文参数post传递乱码处理方法.分享给大家供大家参考.具体分析如下: 问题一: 今天在做项目时,需要用到Ajax,之前我在用GET方式传递中文参数时,只需要在后台程序中设置页面编码为GB2312即中文能正常显示,可是这次由于表单项目较多,不适合用GET方式传递,只能用POST方式,但发现后台程序中设置编码为GB2312时中文还是显示的乱码.经过一番研究问题才最终得到解决. 解决方法: 解决此问题的

Ajax传递中文参数到后台乱码的有效解决方法_AJAX相关

使用Ajax传递中文参数,如果不对参数进行处理的话,传到后台会变成乱码,经测试可以使用如下方法 这里是以jquery.autocomplete插件中获取输入框中的数据传到后台为例: 注意要对中文使用encodeURI编码两次 复制代码 代码如下: extraParams: {q:function(){return encodeURI(encodeURI($('#keyword').val()))}} 这里同样也要解码两次 复制代码 代码如下: String key = URLDecoder.de

Ajax传递中文参数到后台乱码的有效解决方法

使用Ajax传递中文参数,如果不对参数进行处理的话,传到后台会变成乱码,经测试可以使用如下方法 这里是以jquery.autocomplete插件中获取输入框中的数据传到后台为例: 注意要对中文使用encodeURI编码两次 复制代码 代码如下: extraParams: {q:function(){return encodeURI(encodeURI($('#keyword').val()))}} 这里同样也要解码两次 复制代码 代码如下: String key = URLDecoder.de

真正的JQuery.ajax传递中文参数的解决方法_jquery

本人最近也遇到了需要传递中文参数的问题.在网上搜索一下,复制粘贴发的到处都是的"终极""解决方案"无非就是escape(str)来转码,然后在服务端还要写个方法再编辑一次,或用System.Text.Encoding下的方法来换来换去. 我很久以前一直在使用Prototype框架.在.net-GB2312或jsp-utf8下都使用过,从来没遇到有字符编码的问题.于是将Prototype和JQuery代码都下载下来打开研究原因.具体结果如下 不同之处在于JQuery默

JQuery.ajax传递中文参数的解决方法 推荐_jquery

本人最近也遇到了需要传递中文参数的问题.在网上搜索一下,复制粘贴发的到处都是的"终极""解决方案"无非就是escape(str)来转码,然后在服务端还要写个方法再编辑一次,或用System.Text.Encoding下的方法来换来换去. 我很久以前一直在使用Prototype框架.在.net-GB2312或jsp-utf8下都使用过,从来没遇到有字符编码的问题.于是将Prototype和JQuery代码都下载下来打开研究原因. 不同之处在于JQuery默认的cont

PHP Ajax传值中文字符乱码如何解决

在PHP网站开发中,为了增加用户体验度,Ajax是一种经常使用的技术,但是对于初学者来说,时常会碰到Ajax传值中文字符串时变成乱码的问题,有什么办法可以解决PHP AJAX传值中文字符乱码的问题呢? 我们知道Ajax技术由Javascript演变而来,而Javascript使用UTF-8编码,当前后台页面采用GBK或者其他编码,同时没有进行编码转换时,就会出现中文字符乱码问题. PHP Ajax传值中文字符乱码解决方法 方法一.前后台页面以及数据库统一采用UTF8编码,这是最简单的方法. 方法