• 关于JSON.stringify和Unicode编码,需要注意的几点


    1JSON.stringify会自动把所要转换内容中的汉字转换为Unicode编码
    2浏览器间有差别,个别浏览器会把将要提交表单内容中的Unicode编码自动转为汉字(Chrome自动转换,IE不转)
    3Web服务器,可能也有区别对待,其他的不清楚,IIS5不转换,IIS7自动转换(题外话,IIS5不支持SSI指令,IIS7支持)。

    浏览器—1—提交表单——Web服务器—2—asp解析器


    Chrome在1处,在表单提交到服务器前转码。
    IIS7在2处在把表单数据交给asp解析器前转码。


    用JSON.stringify转换再提交的内容中如果有汉字则需要特别处理。
    1不用管他,交给web服务器处理。
    2改JSON.stringify,看那JS代码我就放弃了。
    3加后台代码转换,在网上找了个。
    http://www.cnblogs.com/guardianf/archive/2012/08/21/2649147.html这里有Unicode编码转汉字的功能代码

    public static string unicodetogb(string text) 
    { 
        System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(text, "\\\\u([\\w]{4})"); 
        string a = text.Replace("\\u", ""); 
        char[] arr = new char[mc.Count]; 
        for (int i = 0; i < arr.Length; i++) 
        { 
            arr[i] = (char)Convert.ToInt32(a.Substring(i * 4, 4), 16); 
        } 
        string c = new string(arr); 
        return c; 
    } 
    

     
    说下个人的调试经历。
    项目内容是在线考试

    JSON.stringify 功能为从一个对象解析为字符串
    JSON.stringify(jsondata.table) 会把表中的"单选"转为"\u5355\u9009" 作为JSON字符串提交。

    在IE调试VS调试时回传的数据为
    "id":"10337","answer":"","rightanswer":"C","type":"\u5355\u9009"

    服务端再把JSON转为DataTable
    DataTable dt = JsonToDataTable(table);
    而这个方法转回的结果,没有对Unicode编码作处理。

    第一次的代码。
      string qt = dt.Rows[i]["\"type\""].ToString();
      if (qt == "单选")
    需要验证是题型,算分值,但因为表中数据是"\u5355\u9009"编码,匹配不上。

    因为用的地方不多,我想了想还是直接这么改。
    if (qt == @"\u5355\u9009");

    算是调试过了。可以得到分值,但之后又碰上问题。


    本地调试,正确,发布到本地的IIS上也正确,但发布到服务器上,就出错了(确切的说不是出错,是统计结果为0,要按题型算分值,题型匹配不上,题刑分值为0,总分也就为0)

    我折腾了1个多小时没找到问题所在,本地的IIS调试,正确。服务器有点问题,而且来公司没多久,你们懂的。

    突然就想IE是这样,其他浏览器呢?

    想看看Chorm在各版本下的结果,VS,本地IIS,服务器IIS。

    Chrome本地居然也是结果0,不过虽然结果是错了,却隐约感觉到错误所在。
    不走IE调试,用Chrome调试,查断点,Chrome回发的数据就是"单选",不是IE的"\u5355\u9009"。
    Chrome提交数据时自动把Unicode编码转为了汉字了。
    if (qt == @"\u5355\u9009")的结果显而易见。
    所以改为这样,结果就正常了。
    if (qt == @"\u5355\u9009" || qt == "单选")

    再发布到服务器,也正常。一定是服务器的IIS服务也自动把表单里的Unicode编码转为汉字。

  • 相关阅读:
    Linq to OBJECT延时标准查询操作符
    LINQ to XML
    动态Linq(结合反射)
    HDU 1242 dFS 找目标最短路
    HDu1241 DFS搜索
    hdu 1224 最长路
    BOJ 2773 第K个与m互质的数
    ZOJ 2562 反素数
    2016 ccpc 杭州赛区的总结
    bfs UESTC 381 Knight and Rook
  • 原文地址:https://www.cnblogs.com/zihunqingxin/p/3133863.html
Copyright © 2020-2023  润新知