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的功能 字典-->模型 模型-->字典 字典数组-->模型数组 模型数 ...
随机推荐
- Java将Unix时间戳转换成指定格式日期
public String TimeStamp2Date(String timestampString, String formats){ Long timestamp = Long.pars ...
- Oracle 物化视图创建
create materialized view MV_XXXXrefresh fast on commitwith rowidenable query rewriteasselect * from ...
- .net重启iis线程池和iis站点程序代码【转】
转:http://www.jb51.net/article/44162.htm 重启站点: 复制代码代码如下: /// <summary> /// 根据名字重启站点.(没重 ...
- matlab读取txt文档中的数据
ps:文件中只有数字! format long fp=fopen('文件路径','打开方式(r)') [num,count]=fscnaf(fp,'%f')
- Spring Boot 内嵌Tomcat的端口号的修改
操作非常的简单,不过如果从来没有操作过,也是需要查找一下资料的,所以,在此我简单的记录一下自己的操作步骤以备后用! 1:我的Eclipse版本,不同的开发工具可能有所差异,不过大同小异 2:如何进入对 ...
- WPF学习系列之八(形状,画刷和变换)
形状,画刷和变换 概述: 在许多用户界面技术中,普通控件和自定义绘图之间具有清晰的区别.通常来说,绘图特性只用于特定的应用程序--如游戏,数据可视化和物理仿真等.而WPF具有一个非常不同的原则.它 ...
- sql实现分页
IF EXISTS(SELECT * FROM sysobjects WHERE name='usp_getPage') DROP PROC usp_getPage GO CREATE PROC us ...
- css兼容
1.不同浏览器默认边距不同,必须对body自定义:margin:0;padding:0; 2.margin.padding属性值为%时,不是所有浏览器都支持: 3.transparent属性,IE7之 ...
- Linux下yum安装MPlayer 或 LVC视频播放器
添加第三方源 su -c 'rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noar ...
- ftp自动上传下载文件脚本
FTP自动登录批量下载文件 从ftp服务器192.168.1.60 上的/home/data 到本地的/home/databackup目录 #!/bin/bash ftp -v -n 192.168. ...