当我JSON.stringify()时,代码如下:
var exampleObject = { "name" : "Žiga Kovač", "kraj" : "Žužemberk"};
我在浏览器之间得到了不同的结果。
IE8和谷歌浏览器返回:
{"name":"\u017diga Kova\u010d","kraj":"\u017du\u017eemberk"}
Firefox和Opera返回时:
{"name":"Žiga Kovač","kraj":"Žužemberk"}
我在所有4种浏览器中使用浏览器的本机JSON实现。如果我取消定义原生JSON实现并将其替换为json.org中的实现,那么所有浏览器都会返回:
{"name":"Žiga Kovač","kraj":"Žužemberk"}
为什么会发生这种情况,结果是正确的,并且可以让所有浏览器都返回:
{"name":"\u017diga Kova\u010d","kraj":"\u017du\u017eemberk"}
答案 0 :(得分: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会执行此操作。
答案 1 :(得分:7)
'正确'(可见)版本是UTF8字符串,转义字符串是带有UTF8转义码的ASCII字符串。虽然第一个可以在HTTP正文中使用(只要内容编码设置为UTF8),第二个也可以在HTTP GET请求头中使用。
如果要在GET请求中使用UTF8版本,则需要先使用encodeURIComponent将其转义。
当在服务器端收到内容时,如果HTTP传输正确,则本机字符串实现将确保它包含完全相同的数据(来自所有客户端)。
如果您将浏览器作为HTTP POST正文发送,您的浏览器通常会处理它的编码。
答案 2 :(得分:4)
只要您的第一个示例以UTF-8编码,两个结果都是正确的。
e.g。 \ u017d只是Ž的另一种表示法(017d是UTF8-charset中的位置)
答案 3 :(得分:1)
他们都是正确的。有些返回它以UTF-8编码,有些用ASCII编码。