我正在编写一个使用json表示其资源的web服务,并且我在思考对json进行编码的最佳方法有些困惑。读取json
rfc(http://www.ietf.org/rfc/rfc4627.txt)显然,首选编码是utf-8。但是RFC还描述了用于指定字符的字符串转义机制。我认为这通常用于转义非ASCII字符,从而使生成的utf-8有效ASCII。
假设我有一个包含非ASCII字符(代码点)的json字符串。我的网络服务应该只是对utf-8编码并返回它,还是应该转义所有这些非ascii字符并返回纯ascii?
我希望浏览器能够使用jsonp或eval执行结果。这会影响决策吗?我缺乏对utf-8的各种浏览器javascript支持的知识。
编辑:我想澄清一下,我对如何编码结果的主要担心实际上是关于浏览器对结果的处理。我所读的内容表明,特别是使用JSONP时,浏览器可能对编码敏感。我还没有找到关于该主题的任何非常好的信息,因此我必须开始进行一些测试才能看到会发生什么。理想情况下,我只想转义所需的几个字符,而只是utf-8对结果进行编码。
JSON规范 要求
解码器支持UTF-8。结果,所有JSON解码器都可以处理UTF-8,也可以处理数字转义序列。Java解释器也是如此,这意味着JSONP也将处理UTF-8编码的JSON。
JSON编码器使用数字转义序列的功能只是为您提供了更多选择。选择数字转义序列的一个原因是,如果编码器和预期的解码器 之间 的传输机制不是二进制安全的。
你可能想要使用数字转义序列的另一个原因是为了防止出现在流中的某些字符,例如<
,&
和"
,如果JSON代码被置于不逃逸到HTML或错误地将其解释浏览器作为HTML,其可被解释为HTML序列。这可以抵御HTML注入或跨站点脚本的攻击(注意:某些字符必须在JSON中转义,包括"
和\
)。
一些框架,包括PHP的JSON实现, 总是
在编码器端对ASCII以外的任何字符执行数字转义序列。这旨在与有限的传输机制等实现最大的兼容性。但是,这不应解释为JSON解码器在UTF-8上存在问题的指示。
因此,我想您只是可以像这样决定使用哪个:
除非您的编码器和解码器之间的存储或传输方法不是二进制安全的,否则请仅使用UTF-8。
否则,请使用数字转义序列。
问题内容: 我观看了此视频( 而不是 在未来。但是,当我在量角器首页(位于git hub上)上查看文档时,其最新示例仍在使用浏览器。 我想知道是否有人知道要使用的机芯 还在发生? 提前非常感谢您! 问题答案: 使用已过时,您应该从现在开始切换到。 关于导航到页面的现代方式,请使用: 如果不是角度页面,则
问题内容: 如何检查字符串是否为有效的UTF-8格式? 问题答案: 只能检查字节数据。如果您构造了一个String,则其内部已经存在于UTF-16中。 同样, 只有 字节数组可以使用UTF-8编码。 这是UTF-8转换的常见情况。 如果您不知道字节数组的编码,那么juniversalchardet是一个可以帮助您检测它的库。
本文向大家介绍是否有浏览器还支持HTML5的checkValidity()方法?,包括了是否有浏览器还支持HTML5的checkValidity()方法?的使用技巧和注意事项,需要的朋友参考一下 是的,在Google Chrome和Opera中也可以使用。这也很好- 示例
问题内容: 我有一个来自第三方站点的提要,有时我必须申请和其他时间才能获得所需的可见输出。 如果错误地将相同的内容应用两次/或者使用了错误的方法,我会变得更加难看,这就是我要更改的内容。 如何检测什么时候需要在字符串上应用? 实际上,内容返回的是UTF-8,但是内部有一些不是。 问题答案: 我不能说我可以依靠。我前段时间有一些怪异的误报。 我发现在每种情况下都能正常工作的最普遍方式是:
问题内容: 我想将Jackson的内容写成一个字符串,且UTF-8字符写为ASCII(转义Unicode)。 这是一个示例方法: 默认情况下,此输出: 我想要输出的是: 我该怎么做? 问题答案: 您应该启用JsonGenerator功能,该功能控制非ASCII字符的转义。这是一个例子: 输出为:
示例代码(在REPL中): 输出: 问题是:它不是人类可读的。我的(聪明的)用户希望用JSON转储来验证甚至编辑文本文件(我宁愿不使用XML)。 有没有办法将对象序列化为UTF-8 JSON字符串(而不是)?