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

来源:互联网 发布:csdn免积分下载器 mac 编辑:程序博客网 时间:2024/04/28 10:12

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编码转汉字的功能代码

?
1
2
3
4
5
6
7
8
9
10
11
12
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编码转为汉字。

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 山药皮过敏很痒怎么办 貔貅被家人摸了怎么办? 摸了山药很痒怎么办 山药搞得皮肤痒怎么办 手上弄了山药痒怎么办 老板就是个富二代怎么办 中考准考证密码忘了怎么办 准考证号和密码忘了怎么办 安运继续教育考试不及格怎么办 微信的视频打不开怎么办 公众号被取消了怎么办 合同上不写工资怎么办 已经上班了想考个大专文凭怎么办 微信小程序违规暂停服务怎么办 程序锁密码忘了怎么办 忘了应用锁密码怎么办 毕业后发现论文有错误怎么办 柯丽尔打胶片时胶片卡住了怎么办 闽教英语要收费怎么办 高一学生英语差怎么办 高一英语基础差怎么办 老师教育学生学生跑出教室怎么办 研究生课题难出论文怎么办 一审过了上诉期怎么办 民事判决赔偿不给钱怎么办 民事申诉期过了怎么办 过了两年申诉期怎么办 微快递下单不能定位怎么办 网上打字兼职被骗了怎么办 微信银行卡转错怎么办 在支付宝被诈骗怎么办 发现被骗了报警不理怎么办 投稿投错了网站怎么办 六个月宝宝吃辅食便秘怎么办 六个月宝宝加辅食后便秘怎么办 婴儿6个月便秘怎么办 7个月的孩子便秘怎么办 四个月宝宝喜欢吃手怎么办 博瑞智教育是上当了怎么办 我43岁记忆力差怎么办 艾灸灸出的湿疹怎么办