我正在使用带有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进行复制答案 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序列。