如何通过json解析器和编码器处理转义的unicode?

时间:2009-10-04 04:33:24

标签: json unicode

json规范允许在json字符串(格式为\ uXXXX)中转义unicode。它特别提到受限制的代码点(非字符)作为有效的转义代码点。这是否意味着解析器应该从包含非字符和受限制的代码点的字符串生成非法的unicode?

一个例子:

{ "key": "\uFDD0" }

对此进行解码要么您的解析器不会尝试解释转义的代码点,也不会生成无效的unicode字符串。不是吗?

2 个答案:

答案 0 :(得分:5)

解码时,似乎这适用于unicode replacement characterU+FFFD

来自the Unicode Character Database

  • 用于替换Unicode
  • 中值未知或不可表示的传入字符
  • 比较使用U + 001A作为控制字符来表示替代功能

答案 1 :(得分:3)

“受限制的代码点”是什么意思?你在看什么规范使用那种语言? (我找不到任何这样的。)

如果你在谈论代理人那么是:JavaScript几乎不知道任何关于代理人的事情(*)并且将任何序列中的所有UTF-16代码点视为有效。 JSON仅限于JavaScript支持,也是如此。

*:我能想到的JS的唯一部分是与代理项有什么共同之处的是encodeURIComponent函数,因为它使用UTF-8编码,其中尝试编码无效的代理序列是行不通的。如果您尝试:

encodeURIComponent('\ud834\udd1e'.substring(0, 1))

你会得到一个例外。

(Gah!SO似乎不允许直接发布基本多语言平面之外的字符.Tsk。)