关于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) 会把表中的"单选"转为"u5355u9009" 作为JSON字符串提交。
在IE调试VS调试时回传的数据为 "id":"10337","answer":"","rightanswer":"C","type":"u5355u9009"
服务端再把JSON转为DataTable DataTable dt = JsonToDataTable(table); 而这个方法转回的结果,没有对Unicode编码作处理。
第一次的代码。 string qt = dt.Rows[""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编码转为汉字。
- 怎样做情感分析
- Python|编写自己的类
- 碎片化 | 第四阶段-45-session为空问题解决-视频
- 以后有机会写框架用得着的
- 合并两个不相关的Git仓库
- 用 Tensorflow 建立 CNN
- 碎片化 | 第四阶段-36-struts-spring结合jdbc实现删除功能-视频
- 跨域访问支持(Spring Boot、Nginx、浏览器)
- 自己动手写个聊天机器人吧
- 碎片化 | 第四阶段-37-sturts2-登录功能实现-视频
- Spring Cloud Edgware新特性之六:Artifact ID变更
- 用 RNN 训练语言模型生成文本
- 碎片化 | 第四阶段-38-Struts2登录session对象封装-视频
- LeetCode实战:子问题分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MongoDB 指令
- 硬件设计之 Distributed Arithmetic 一例
- JavaScript 框架学习(JQuery)
- MongoDB 部署
- 结构体对齐原则在自定义协议解析时的妙用之法
- Spring JDBC 框架一个最简单的Hello World级别的例子
- Celery 分布式框架 学习
- .NET Core + K8S + Loki 玩转日志聚合
- varint是啥你真的知道么?
- 一篇文章带你入门移动安全
- Could not load JDBC driver class [com.mysql.jdbc.Driver]
- [Bazel]自定义规则实现将多个静态库合并为一个动态库或静态库
- [Golang]包管理
- Power Query中避免出错的几种情况
- 我的开发日记(十五)