• 闲话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        globaltrue,
    4        type: "GET",
    5        contentType: "application/x-www-form-urlencoded",
    6        processData: true,
    7        async: true
    8}
    • 欢迎关注收取阅读最新文章
    • 好看点个推荐呗~
    • 出处:http://www.cnblogs.com/viter/
    • 本文版权归作者和博客园共有,欢迎个人转载,必须保留此段声明;商业转载请联系授权,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    • 欢迎大家关注我的微信公众号,一起学习一起进步
  • 相关阅读:
    MySQL_解决ERROR 2006 (HY000) at line XX MySQL server has gone away问题
    mysql全量备份脚本
    mysql增量备份脚本
    使用u32过滤器设置基于mac地址的下载限制
    Quantum & r2q
    关于limit hashlimit资料整理
    u32 mac以及arp匹配
    Iptables 规则 一些简单实例和详细介绍
    Optimizing shaper — hashing filters (HTB)
    使用ingress qdisc和ifb进行qos
  • 原文地址:https://www.cnblogs.com/viter/p/1592506.html
Copyright © 2020-2023  润新知