关于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["\"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编码转为汉字。

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2017-09-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木宛城主

ASP.NET那点不为人知的事(三)

有了以下的知识: ASP.NET那点不为人知的事(一) ASP.NET那点不为人知的事(二) 想必开发一个小型服务器以不是问题了,功能补复杂,能够响应...

2059
来自专栏码农阿宇

EF Core下利用Mysql进行数据存储在并发访问下的数据同步问题

小故事 在开始讲这篇文章之前,我们来说一个小故事,纯素虚构(真实的存钱逻辑并非如此) 小刘发工资后,赶忙拿着现金去银行,准备把钱存起来,而与此同时,小刘的老婆刘...

3395
来自专栏木宛城主

SharePoint 创建 Lookup 类型的Site Column解决跨站问题

在某些情况下,我们需要去引用其他List中的数据,比如在网站集(Site Collection)上有个List叫Country,在其子网站(WebSite)有...

2399
来自专栏用户2442861的专栏

linux下jsoncpp的编译和测试使用

http://blog.csdn.net/ljp1919/article/details/48319779

3403
来自专栏跟着阿笨一起玩NET

ASP.NET用HttpListener实现文件断点续传

本文转载:http://www.cnblogs.com/TianFang/archive/2007/01/03/610739.html

1031
来自专栏c#开发者

如何给DataGrid添加自动增长列

如何给DataGrid添加自动增长列 我想我们都知道在数据库中如何添加自增长列,我们可以将这个自增长列绑定到DataGrid上使得用户方便的知道现在是第几行,今...

43410
来自专栏大内老A

我的WCF之旅(2):Endpoint Overview

WCF实际上是构建了一个框架,这个框架实现了在互联系统中各个Application之间如何通信。使得Developers和Architect在构建分布式系统中,...

2227
来自专栏Golang语言社区

[Go 语言社区] Golang架构底层---日志函数

服务器后台架构,日志是必不可少的一个功能模块,日志可以分为很多中:统计日志,访问日志,错误日志等 今天大家发是运行中的日志函数 // 日志函数,传入数据为字...

3336
来自专栏智能大石头

XCode读取Excel数据(适用于任何数据库)

虽然是充血模型,虽然是强类型,XCode同样支持遍历任何数据库结构,并以强类型(相对于DataSet等字典访问)方式读取数据。 要遍历数据库结构是很容易的事情,...

2178
来自专栏Porschev[钟慰]的专栏

【2013年】开发常见问题回顾(一)

记录开发中遇到的和别人问的较多的问题.... IE10中LinkButton不可用     这应该是2013年初遇到的一个BUG,当使用Asp.Net开发Web...

2865

扫码关注云+社区

领取腾讯云代金券