前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于JSON.stringify和Unicode编码,需要注意的几点

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

作者头像
李海彬
发布2018-03-27 16:10:51
2.1K0
发布2018-03-27 16:10:51
举报
文章被收录于专栏:Golang语言社区

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. public static string unicodetogb(string text)
  2. {
  3. System.Text.RegularExpressions.MatchCollection
  4. mc = System.Text.RegularExpressions.Regex.Matches(text, "\\\\u([\\w]{4})");
  5. string a
  6. = text.Replace("\\u",
  7. "");
  8. char[]
  9. arr = new char[mc.Count];
  10. for (int i
  11. = 0; i < arr.Length; i++)
  12. {
  13. arr[i]
  14. = (char)Convert.ToInt32(a.Substring(i
  15. * 4, 4), 16);
  16. }
  17. string c
  18. = new string(arr);
  19. return c;
  20. }

复制代码

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

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编码转为汉字。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档