【发布时间】:2014-06-13 22:06:34
【问题描述】:
我正在阅读 RFC 4627,但无法确定以下内容是否为有效 JSON。考虑一下这个简约的 JSON 文本:
["\u005c"]
问题在于小写 c。
根据 RFC 的 text 是允许的:
任何字符都可以转义。如果角色在 Basic 多语言平面(U+0000 到 U+FFFF),那么它可能是 表示为六个字符的序列:反向固线,后跟 由小写字母 u 后跟四个十六进制数字 对字符的代码点进行编码。 十六进制字母 A 虽然 F 可以是大写或小写。 因此,例如,一个包含 只有一个反斜线字符可以表示为 “\u005C”。
(强调我的)
问题在于 RFC 还包含 语法:
char = unescaped /
escape (
%x22 / ; " quotation mark U+0022
%x5C / ; \ reverse solidus U+005C
%x2F / ; / solidus U+002F
%x62 / ; b backspace U+0008
%x66 / ; f form feed U+000C
%x6E / ; n line feed U+000A
%x72 / ; r carriage return U+000D
%x74 / ; t tab U+0009
%x75 4HEXDIG ) ; uXXXX U+XXXX
HEXDIG 在引用的 RFC 4234 中定义为
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
只包含大写字母。
FWIW,据我研究,大多数 JSON 解析器都接受大写和小写字母。
问题:什么是真正正确的?有没有矛盾,RFC中的语法要修正?
【问题讨论】:
标签: json unicode language-lawyer rfc