当前位置:  开发笔记 > 编程语言 > 正文

JSON字符编码 - 浏览器是否支持UTF-8,还是应该使用数字转义序列?

如何解决《JSON字符编码-浏览器是否支持UTF-8,还是应该使用数字转义序列?》经验,为你挑选了4个好方法。

我正在编写一个使用json来表示其资源的web服务,我有点想到编写json的最佳方法.阅读json rfc(http://www.ietf.org/rfc/rfc4627.txt)显然首选的编码是utf-8.但rfc还描述了一种用于指定字符的字符串转义机制.我假设这通常用于转义非ascii字符,从而使得得到的utf-8有效ascii.

所以,假设我有一个json字符串,其中包含非ascii的unicode字符(代码点).我的webservice应该只是utf-8编码并返回它,还是应该逃脱所有那些非ascii字符并返回纯ascii?

我希望浏览器能够使用jsonp或eval执行结果.这会影响决定吗?我对各种浏览器对utf-8的javascript支持的了解很少.

编辑:我想澄清一下,我对如何对结果进行编码的主要关注点是关于结果的浏览器处理.我读过的内容表明,特别是在使用JSONP时,浏览器可能对编码很敏感.我没有找到关于这个主题的任何非常好的信息,所以我将不得不开始做一些测试,看看会发生什么.理想情况下,我只想逃避所需的几个字符,只需对utf-8进行编码即可.



1> thomasrutter..:

正如JSON规范所要求的那样,所有JSON解析器都可以处理正确的UTF-8以及数字转义序列.

JSON编码器使用数字转义序列的能力只是为您提供了更多选择.您可以选择数字转义序列的一个原因是编码器和目标解码器之间的传输机制不是二进制安全的.

你可能想要使用数字转义序列的另一个原因是为了防止出现在流中的某些字符,例如<,&",如果JSON代码被置于不逃逸到HTML或浏览器错误地将其解释为HTML,其可被解释为HTML序列.这可以防止HTML注入或跨站点脚本(注意:一些字符必须在JSON中转义,包括"\).

一些框架,包括PHP的JSON实现,总是在编码器端为ASCII以外的任何字符执行数字转义序列.这旨在最大限度地兼容有限的传输机制等.但是,这不应被解释为JSON解码器存在UTF-8问题的迹象.

所以,我想你可以决定使用这样的:

只需使用UTF-8,除非您在编码器和解码器之间存储或传输的方法不是二进制安全的.

否则,请使用数字转义序列.


“所有JSON解码器都可以处理UTF-8”确实是正确的。如果某些东西不能接受UTF-8,则它不是JSON解码器。它可能类似于JSON解码器,但绝对不是一个。

2> 小智..:

我有一个问题.当我JSON编码带有"é"字符的字符串时,每个浏览器都将返回相同的"é",除了将返回"\ u00e9"的IE.

然后使用PHP json_decode(),如果它找到"é"就会失败,所以对于Firefox,Opera,Safari和Chrome,我要在json_decode()之前调用utf8_encode().

注意:在我的测试中,IE和Firefox使用他们的原生JSON对象,其他浏览器使用json2.js.


可能你的意思是'utf8_encode()`,http://php.net/manual/en/function.utf8-encode.php
如果IE无法解码,那么无论您使用什么JSON解码器,它都是一个错误.所有JSON解码器必须成功解码编码形式,否则它们不是JSON解码器.至于json_decode()与é未转义的问题,你输入它的文本可能不是UTF-8.JSON解码器总是假设UTF-8,甚至是PHP实现,即使PHP在许多其他函数中通常不采用UTF-8.还有其他字符编码可以包括一个未转义的屏幕,在屏幕上看起来相同,但不是UTF-8.以\ uXXXX形式编码是一种解决方法.

3> chaos..:

ASCII不在其中.使用UTF-8编码意味着您不使用ASCII编码.你应该使用转义机制的是RFC所说的:

除了必须转义的字符外,所有Unicode字符都可以放在引号内:引号,反向实线和控制字符(U + 0000到U + 001F)



4> 小智..:

我遇到了同样的问题.这个对我有用.请检查一下.

json_encode($array,JSON_UNESCAPED_UNICODE);

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有