Javascript 浏览器之间JSON.stringify结果的差异
当我输入JSON.stringify()时,将显示以下代码:Javascript 浏览器之间JSON.stringify结果的差异,javascript,json,browser,cross-browser,Javascript,Json,Browser,Cross Browser,当我输入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"}
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"}
为什么会发生这种情况,哪个结果是正确的,是否有可能使所有浏览器都返回:
{"name":"Žiga Kovač","kraj":"Žužemberk"}
{"name":"\u017diga Kova\u010d","kraj":"\u017du\u017eemberk"}
它们都是正确的。有些返回的是UTF-8编码的,有些返回的是ASCII编码的。只要第一个示例是UTF-8编码的,两个结果都是正确的
e、 g.\u017d只是Ž的另一种表示法(017d是UTF8字符集中的位置)这两种表示法是绝对等效的 一个使用Unicode转义序列(
\uxxx
)表示Unicode字符,另一个使用实际的Unicode字符。将字符串定义为:
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
一串
- ""
-“chars”
查尔斯
-煤焦
-煤焦
烧焦
-除“或\或控制字符以外的任何Unicode字符
-其中一个:\“\\\/\b\f\n\r\t
-\u四个十六进制数字
字符串本身没有区别,只是在它们的表示形式上。这与HTML在使用©代码>,和#169
或)
表示版权标志。正确(可见)版本是UTF8字符串,转义字符串是带有UTF8转义码的ASCII字符串。第一个可以在HTTP正文中使用(只要内容编码设置为UTF8),第二个也可以在HTTP GET请求头中使用
如果希望在GET请求中使用UTF8版本,则需要首先使用encodeURIComponent对其进行转义
当在服务器端接收到内容时,本机字符串实现将确保它包含完全相同的数据(来自所有客户端),前提是HTTP传输正确
如果您将其作为HTTP POST正文发送,您的浏览器通常会处理它的编码。这是相关的:如何将Firefox和Opera中JSON中的非ascii字符转换为\uxxx?“我正需要它。”@Matic:我不明白你为什么需要它?毕竟,这是一回事。如果使用“Ž”
而不是“\u017d”
通过线路发送此数据时遇到问题,则只需将内容类型标题调整为UTF-8即可。