Mat*_*tic 12 javascript browser json cross-browser
当我JSON.stringify()时,以下代码:
var exampleObject = { "name" : "Žiga Kova?", "kraj" : "Žužemberk"};
Run Code Online (Sandbox Code Playgroud)
我在浏览器之间得到不同的结果
IE8和谷歌浏览器返回:
{"name":"\u017diga Kova\u010d","kraj":"\u017du\u017eemberk"}
Run Code Online (Sandbox Code Playgroud)
Firefox和Opera返回时:
{"name":"Žiga Kova?","kraj":"Žužemberk"}
Run Code Online (Sandbox Code Playgroud)
我在所有4个浏览器中使用浏览器的本机JSON实现.如果我取消定义本机JSON实现并将其替换为json.org中的实现,则所有浏览器都返回:
{"name":"Žiga Kova?","kraj":"Žužemberk"}
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,结果是正确的,并且可以使所有浏览器返回:
{"name":"\u017diga Kova\u010d","kraj":"\u017du\u017eemberk"}
Run Code Online (Sandbox Code Playgroud)
?
Tom*_*lak 12
这两个表示绝对等同.
一个使用Unicode转义序列(\uxxxx)来表示Unicode字符,另一个使用实际的Unicode字符.json.org将字符串定义为:
string
- ""
- "chars"
chars
- char
- char chars
char
- any Unicode character except " or \ or control characters
- one of: \" \\ \/ \b \f \n \r \t
- \u four-hex-digits
字符串本身没有区别,只有它们的表示.这是同样的事情,当你使用HTML呢©,©还是©代表版权符号.
"正确"(可见)版本是UTF8字符串,转义字符串是带有UTF8转义码的ASCII字符串.虽然第一个可以在HTTP主体中使用(只要内容编码设置为UTF8),第二个也可以在HTTP GET请求头中使用.
如果要在GET请求中使用UTF8版本,则需要先使用encodeURIComponent将其转义.
当在服务器端接收内容时,如果HTTP传输正确,则本机字符串实现将确保它包含完全相同的数据(来自所有客户端).
如果您将其作为HTTP POST正文发送,您的浏览器通常会处理它的编码.