加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:54:04 所属栏目:百科 来源:网络整理
导读:1JSON.stringify会自动把所要转换内容中的汉字转换为Unicode编码 2浏览器间有差别,个别浏览器会把将要提交表单内容中的Unicode编码自动转为汉字(Chrome自动转换,IE不转) 3Web服务器,可能也有区别对待,其他的不清楚, IIS5不转换,IIS7自动转换 (题外

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( text)
{
System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(text, "\u([w]{4})" );
a = text.Replace( "u" ,monospace!important; min-height:auto!important; color:blue!important">"" );
char [] arr = new [mc.Count];
for ( int i = 0; i < arr.Length; i++)
{
arr[i] = ( )Convert.ToInt32(a.Substring(i * 4,4),16);
}
c = (arr);
return c;
}


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

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

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

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

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

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

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


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

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读