Ich las RFC 4627 und ich kann nicht herausfinden, ob das folgende JSON gültig ist oder nicht. Betrachten Sie diesen minimalistischen JSON Text:JSON Unicode-Escape-Sequenz - Kleinbuchstaben oder nicht?
["\u005c"]
Das Problem ist die Kleinc
.
Nach dem Text des RFC es erlaubt ist:
Jedes Zeichen maskiert werden kann. Befindet sich das Zeichen in der Mehrsprachigkeitsebene (U + 0000 bis U + FFFF), kann es als sechsstellige Zeichenfolge dargestellt werden: ein umgekehrter Solidus, gefolgt von mit dem Kleinbuchstaben u gefolgt von vier Hexadezimalziffern dass den Codepunkt des Zeichens codieren. Die hexadezimalen Buchstaben A bis F können Groß- oder Kleinbuchstaben sein. So kann z. B. eine Zeichenfolge, die nur ein einzelnes Reverse Solidus-Zeichen enthält, als "\ u005C" dargestellt werden.
(Hervorhebung von mir)
Das Problem ist, dass der RFC enthält auch die Grammatik hierfür:
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
wo HEXDIG
in referenzierten RFC 4234 als
HEXDIG = DIGIT/"A"/"B"/"C"/"D"/"E"/"F"
definiert ist
enthält nur Großbuchstaben.
FWIW, von dem, was ich erforschte die meisten JSON-Parser akzeptieren Groß- und Kleinbuchstaben.
Frage (n): Was ist eigentlich richtig? Gibt es einen Widerspruch und die Grammatik im RFC sollte behoben werden?
Bezieht sich das nicht nur auf die Grammatik des Schreibens anderer Grammatiken? Ich meine, es erlaubt 'HEXDIG' und' heXdIG' austauschbar verwendet werden, aber das kann sicherlich nicht beziehen sich auf alle Zeichen in der Grammatik wie "A" 'sonst könnten Sie ** keine ** Groß-und Kleinschreibung Sprache definieren !? –
@DanielFrey: Ich glaube nicht, das ist ein separater Teil des RFC:" Regelnamen sind case-insensitive ". Ich stimme zu, dass es noch nicht klar ist. –
+1 Ich schrieb den ersten Kommentar vor Ihrer Bearbeitung. Mit der Bearbeitung macht es jetzt Sinn und ja, ich stimme zu, es ist nicht die klarste Spezifikation :) –