[英]JSON Unicode escape sequence - lowercase or not?
我正在阅读RFC 4627,我无法弄清楚以下是否是有效的JSON。 考虑这个简约的JSON文本:
["\u005c"]
问题是小写 c
。
根据RFC的文本 ,允许:
任何角色都可能被转义。 如果字符在基本多语言平面(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中的语法应该修复?
我认为这是RFC 4234的这一部分解释的:
ABNF字符串不区分大小写,这些字符串的字符集是us-ascii。
因此:
rulename = "abc"
和:
rulename = "aBc"
将匹配“abc”,“abc”,“aBc”,“abC”,“ABc”,“aBC”,“AbC”和“ABC”。
另一方面,后续部分并不十分清楚:
要指定IS SENSITIVE的规则,请单独指定字符。
例如:
rulename = %d97 %d98 %d99
要么
rulename = %d97.98.99
在HEXDIG
规则的情况下,它们是单个字符开始 - 但它们被字面上指定为"A"
等而不是%d41
,所以我怀疑这意味着它们不区分大小写。 这不是我读过的最清晰的规范:(
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.