【问题标题】:JSON Unicode escape sequence - lowercase or not?JSON Unicode转义序列 - 小写与否?
【发布时间】: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


    【解决方案1】:

    认为这部分在 RFC 4234 中有解释:

    ABNF 字符串不区分大小写,这些字符串的字符集是 us-ascii。

    因此:

        rulename = "abc"
    

    和:

        rulename = "aBc"
    

    将匹配“abc”、“Abc”、“aBc”、“abC”、“ABc”、“aBC”、“AbC”和 “ABC”。

    另一方面,后续部分不是很清楚:

    要指定区分大小写的规则,请单独指定字符。

    例如:

        rulename    =  %d97 %d98 %d99
    

        rulename    =  %d97.98.99
    

    HEXDIG 规则的情况下,它们是以单个字符开头 - 但它们被指定为 "A" 等而不是 %d41,所以我怀疑表示它们不区分大小写。这不是我读过的最清晰的规范:(

    【讨论】:

    • 不就是指写其他语法的语法吗?我的意思是它允许HEXDIGheXdIG 可以互换使用,但肯定不能像"A" 那样引用语法中的所有字符,否则你不能定义 any 区分大小写语言!?
    • @DanielFrey:我不这么认为——这是 RFC 的一个单独部分:“规则名称不区分大小写”。我同意这还远不清楚。
    • +1 我在您编辑之前写了第一条评论。有了编辑现在就有意义了,是的,我同意这不是最清晰的规范:)
    • 在定义 RFC 4627 的 JSON 中所有区分大小写的关键字均使用单个字符(在其后的注释中带有 ASCII 文字)提供,例如 false = %x66.61.6c.73.65 ; false
    猜你喜欢
    • 2021-01-30
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    相关资源
    最近更新 更多