IE8中JSON.stringify方法对自动转换unicode字符的解决方案

Posted 杯酒红尘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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码转化回字符:

    function stringify(object){
        var string = JSON.stringify(object)
        return string.replace(/\\u([0-9a-fA-F]{2,4})/g,function(string,matched){
            return String.fromCharCode(parseInt(matched,16))
        })
    }

这样,就可以解决掉IE8中JSON.stringify自动转换utf-8字符带来的不便了。

 

以上是关于IE8中JSON.stringify方法对自动转换unicode字符的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Jquery怎么将一个object对象转换成json字符串

JSON对象和字符串之间的相互转换 – JSON.parse() 和 JSON.stringify()

Jquery怎么将一个object对象转换成json字符串

js中 json对象与json字符串相互转换的几种方式

标记在IE8以下时使用JSON.stringify报JSON未定义错误的问题

JS JSON.stringify 详解