如何纠正IE8原生json中的字符编码?
我正在使用 json 和 unicode 文本,并且 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 的相同替代品?
编辑:使用上述代码在 jsfiddle 上进行重现 - http://jsfiddle.net/vV4uz/
I am using json with unicode text, and am having a problem with the IE8 native json implementation.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
var stringified = JSON.stringify("สวัสดี olé");
alert(stringified);
</script>
Using json2.js or FireFox native json, the alert()
string is the same as in the original one. IE8 on the other hand returns Unicode values rather than the original text \u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35 ol\u00e9
. Is there an easy way to make IE behave like the others, or convert this string to how it should be ? And would you regard this as a bug in IE, I thought native json implementations were supposed to be drop-in identical replacements for json2.js ?
Edit: An repro on jsfiddle using the above code - http://jsfiddle.net/vV4uz/
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
回答我自己的问题 - 显然这在 IE8 中是不可能的,但它在 IE9 Beta 中可以正常工作。
不过,修复是可能的:
它将正确alert()返回所有 IE、FF 和 Chrome 上的原始字符串。
To answer my own question - Apparently this is not natively possible in IE8, but it does work correctly in the IE9 Beta.
A fix is possible though:
Which will correctly alert() back the original string on all of IE, FF and Chrome.
如果这是在发送到服务器之前,您可以先对其进行编码
encodeURIComponent(JSON.stringify("สวัสดี olé"))
并在服务器上使用utf8解码器
If this is before sending to the server, you can encode it first
encodeURIComponent(JSON.stringify("สวัสดี olé"))
and use a utf8 decoder on the server
确保您的服务器配置正确。我的正在回复,即使对于 unicode JSON 文件:
Ensure, your server is properly configured. Mine was replying, even for unicode JSON files:
我认为正则表达式:
太激进了。如果您的输入中有一个不是 UTF 字符的字符串“\u”,它仍然会捕获它。
我想你需要的是这样的:
如果 x 是数字并且整个序列不以反斜杠 (\) 开头,则这只会更改 \uxxxx 序列。
I think regexp:
is too aggresive. If you had a string '\u' in your input that wasn't the UTF character, it would still catch it.
I think what you need is this:
This would only change \uxxxx sequences if x is a digit and the whole sequence is not proceeded by a backslash (\).