Escape-последовательность JSON Unicode-строчная или нет?
Я читал RFC 4627, и я не могу понять, действительно ли следующее JSON или нет. Рассмотрим этот минималистичный текст JSON:
["u005c"]
проблема строчные c
.
по словам текст из RFC допускается:
любой символ может быть сбежал. Если персонаж находится в Basic Многоязычная плоскость (U+0000 через U+FFFF), тогда она может быть представлен в виде шестизначной последовательности: a обратный Солидус, а затем строчной буквой u, за которой следуют четыре шестнадцатеричные цифры, закодировать код персонажа. шестнадцатеричные буквы A, хотя F может быть верхний или нижний регистр. так, например, строка, содержащая только один обратный символ solidus может быть представлен как "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 должна быть исправлена?
1 ответов
Я думаю это объясняется этой частью RFC 4234:
строки ABNF нечувствительны к регистру, и набор символов для этих строк-us-ascii.
отсюда:
rulename = "abc"
и:
rulename = "aBc"
будет соответствовать "abc", "Abc", "aBc", "abC", "ABc", "aBC", "AbC", и "АЗБУКА."
С другой стороны, последующая часть не очень ясна:
указать правило, учитывающее регистр, указывает символы по отдельности.
например:
rulename = %d97 %d98 %d99
или
rulename = %d97.98.99
в случае HEXDIG
правило, они являются отдельными символами для начала , но они указаны буквально как "A"
etc, а не %d41
, Я подозреваемый это означает, что они чувствительны к регистру. Это не самая ясная спецификация, которую я читал : (