如何纠正IE8原生json中的字符编码?

时间:2010-04-03 09:23:34

标签: javascript json internet-explorer unicode encoding

我正在使用带有unicode文本的json,并且遇到了IE8本机json实现的问题。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<script>
    var stringified = JSON.stringify("สวัสดี olé");
    alert(stringified);
</script>

使用json2.js或FireFox原生json,alert()字符串与原始字符串相同。另一方面,IE8返回Unicode值而不是原始文本\u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35 ol\u00e9。是否有一种简单的方法可以使IE的行为与其他行为相同,或者将此字符串转换为应该如何?你会认为这是IE中的一个错误,我认为原生json实现应该是json2.js的相同替代品吗?

编辑:使用上面的代码 - http://jsfiddle.net/vV4uz/

对jsfiddle进行复制

4 个答案:

答案 0 :(得分:7)

回答我自己的问题 - 显然这在IE8中本身不可能,但它在IE9测试版中确实可以正常工作。

虽然可以fix

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<script>
    var stringified = JSON.stringify("สวัสดี olé");
    stringified  = unescape(stringified.replace(/\\u/g, '%u'));
    alert(stringified);
</script>

这将正确警告()回复所有IE,FF和Chrome上的原始字符串。

答案 1 :(得分:1)

如果这是在发送到服务器之前,您可以先对其进行编码 encodeURIComponent(JSON.stringify(“สวัสดีolé”)) 并在服务器上使用utf8解码器

答案 2 :(得分:0)

确保您的服务器配置正确。我正在回复,即使对于unicode JSON文件:

Content-Type: text/html; charset=ISO-8859-1

答案 3 :(得分:0)

我认为regexp:

  

unescape(stringified.replace(/ \ u / g,'%u'));

过于咄咄逼人。如果输入中的字符串'\ u'不是UTF字符,它仍会捕获它。

我认为你需要的是:

  

UNESCAPE(stringified.replace(/([^ \\])\\ U([0-9] [0-9] [0-9] [0-9])/克,“$ 1%U $ 2 “));

如果x是一个数字并且整个序列没有以反斜杠(\)进行,那么这只会改变\ uxxxx序列。