IE8中JSON.stringify方法对自动转换unicode字符的解决方案
IE8内置了JSON对象,用以处理JSON数据。与标准方法的不同,IE8的JSON.stringify会把utf-8字符转码:
var str = "我是程序员"
var jsonstr = JSON.stringify(str) //""\u6211\u662f\u7a0b\u5e8f\u5458""
一般情况下,我们是在向服务器发送数据的时候,才调用这个方法。服务器端可以正确的解析,所以没有什么问题。但是如果我们jsonstr还要在别的地方用到,那就需要做一些处理。
一种方法是使用eval:
var parsed = eval('('+jsonstr+')') //"我是程序员"
但是,当我们对str调用了不止一次的话,这样的方法还行吗:
var str = '我是程序员'
var jsonstr = JSON.stringify(str)
var another_jsonstr = JSON.stringify(jsonstr) //
var another_parsed = eval('('+another_jsonstr+')')
another_parsed //""\u6211\u662f\u7a0b\u5e8f\u5458""
事实证明是不行的,那么我们写一个方法,如果发现解析的结果有utf-8码,就认为该字符串未解析完全,继续调用eval解析:
function IE8parse(json) {
var re = /\\u[0-9A-Fa-f]{4}/,
result
result = eval('(' + json + ')')
while (re.test(result)) {
result = eval('(' + result + ')')
}
return result
}
IE8parse(another_jsonstr) //"我是程序员"
另一种方法是把IE8的JSON.stringify方法做一些处理,把它转化后的字符串中的utf-8码转化回字符,注意,由于utf-8是可变长度编码,所以当遇到非单字节字符时,这种解析方式会出问题(目前测试只在IE8中会出现,例如“\uD842\uDFB7”,对应的汉字为 "
IE8中JSON.stringify方法对自动转换unicode字符的解决方案的更多相关文章
- JS中JSON.stringify()方法,将js对象(json串)转换成字符串,传入服务器
JSON 通常用于与服务端交换数据. 在向服务器发送数据时一般是字符串. 我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串. 语法 JSON.string ...
- JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
- JSON.stringify 方法
浅谈 JSON.stringify 方法 用过 json 的应该都知道,把一个对象通过 stringify 之后提交给后台或者存储在 Storage 里是很常用的手段.但是 IE6-8 下没有 J ...
- javascirpt的json.stringify()方法在IE浏览器兼容性模式下出错的原因与解决办法
今天开机混底薪的时候遇到一个JSON.stringify()在IE浏览器兼容模式下的问题. 问题描述 一个弹窗选择的功能原来好好的,突然就不行了. 想要调试调试不了,报错信息也看不到(一开F12这破I ...
- java 写入int型时会自动转换成字符
java 写入int型时会自动转换成字符
- 浅谈 JSON.stringify 方法
一.前言 最近项目中,遇到需要将对象转换成字符串进行传递,上次写过一篇文章关于json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值.当时主要是用在有时候处理字符串和 ...
- Js中JSON.stringify()与JSON.parse()与eval()详解及使用案例
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使使JSON称为理想的数据交换语 ...
- JSON.parse和JSON.stringify方法
1.JSON.parse(“要转换的数据”) 2.JSON.stringify(“要转化的数据”) 3.首先,两个方法的用法是有差别的: ①.JSON.stringify是从一个对象中解析出字符串 ② ...
- MJExtension(JSON到数据模型的自动转换)
整理自:http://www.jianshu.com/p/93c242452b9b. 1.MJExtension的功能 字典-->模型 模型-->字典 字典数组-->模型数组 模型数 ...
随机推荐
- android项目中如何加载已有so库 <转>
1,在项目根目录下建立文件夹libs/armeabi文件夹 2,将so库放入 libs/armeabi文件夹 注意事项: 1,如果采用静态注册的方式请注意C文件中严格按照命名规则 Java_packa ...
- [HTML5] document.hidden
特殊说明: 通过document.hidden属性,可判断页面是否可见. 如果不可见,则document.hidden为true. 如果可见, 则为false. 但是, 如果该页面只是被其它窗口挡住, ...
- 【翻译】什么是 eCPM & RPM 与其计算公式
[原文链接] What is eCPM & RPM. How to Calculate eCPM & RPM using Formula eCPM代表着每千次网页爆光转换率(或者是每千 ...
- 学习资料 50个常用的sql语句
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...
- Duilib扩展《01》— 双击、右键消息扩展
用过duilib的可能会发现,duilib中有些控件没能很好的区分左键.右键等消息.所以根据实际需要,我们需要进行相关区分处理,或者自行扩展. 一. 左键.右键消息区分 我们以CListUI控件来分析 ...
- 用verilog模拟DDS产生正弦波信号
前言: DDS:直接数字频率合成,正弦波0-2pi周期内,相位到幅度是一一对应的(这里我们使用放大后的整数幅度). 主要思路: 个人理解,FPGA不擅长直接做数字信号计算,那样太占用片上逻辑资源,所以 ...
- poj2070
#include <stdio.h> int main(){ double a,b,c; int s; while(~scanf("%lf%lf%lf",&a, ...
- Unieap3.5-前台js用SQL语句执行数据请求
执行UPDATE var sql=" update T_SS_SETTLEMENT_RECORD "+ " set CINVOICE_INFO_FLAG='Y',&quo ...
- MyBatis学习系列二——增删改查
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...
- 获取本地ip地址
#import <ifaddrs.h> #import <arpa/inet.h> // Get IP Address - (NSString *)getIPAddress { ...