2014-06-13 21 views
9

Ben RFC 4627 okuyordum ve aşağıdaki geçerli JSON olup olmadığını ben çözemiyorum. Bu minimalist JSON metni düşünün:JSON Unicode çıkış dizisi - küçük harf mi yoksa değil mi?

["\u005c"] 

sorun küçükc olduğunu.

RFC metne göre, izin verilir:

Herhangi bir karakter çıkışı yapılabilir. Karakter Basic Çok Dilli Düzlemde (U + 0000 ile U + FFFF) ise, altı karakterlik bir sıra olarak temsil edilen olabilir: ters bir solidus, ardından küçük harf harfi ile , ardından dört onaltılık basamak Bu , karakterin kod noktasını kodlar. F büyük veya küçük olabilir da onaltılık harfleri. Bu nedenle, örneğin, sadece tek bir ters sertleşme karakter aynı "\ u005C" olarak ifade edilebilir.

(vurgu madeni)

sorun RFC da bu amaç için dilbilgisi içerir ki: HEXDIG

HEXDIG   = DIGIT/"A"/"B"/"C"/"D"/"E"/"F" 
olarak belirtilen RFC 4234 de tanımlandığı

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 

yalnızca büyük harfleri içerir

.

FWIW, neyden Ben en çok JSON ayrıştırıcıları hem büyük ve küçük harfleri kabul araştırdı.

Soru (lar): aslında doğru nedir? Bir çelişki var mı ve RFC'deki dilbilgisi düzeltilmeli mi?

cevap

10

Ben RFC 4234 bu kısmı tarafından anlatılmış düşünüyorum :

ABNF dizeleri harf duyarsız ve bu dizgelerin karakter kümesi us-ascii.

Dolayısıyla:

rulename = "abc" 

ve:

rulename = "aBc" 

"abc" maç olacak, "Abc", "ABC", "ABC", "ABC", "ABC", "AbC "ve " ABC ". Öte yandan

, Follow-on bölümü korkunç belli değil:

, vaka duyarlı bir kuralın belirtmek bireysel karakterleri belirtin.

Örneğin

:

rulename = %d97 %d98 %d99 

veya HEXDIG kuralın durumunda

rulename = %d97.98.99 

, onlar başlamak bireysel karakterler konum - ama vb "A" olarak tam anlamıyla belirtilen konum yerine %d41 daha, bu yüzden onlar harf duyarsız olduğunuz anlamına gelir
şüpheli . Bu okudum en net Spec :(olmadığını sadece diğer dilbilgisi yazma dilbilgisi atıfta mu? Yani o `HEXDIG` ve` heXdIG` birbirinin yerine kullanılabilir, ancak izin verir

+0

kesinlikle olamaz aksi takdirde tanımlamak edemedi "a" '' gibi dilbilgisi tüm karakterlerin kullanılması ** herhangi ** harfe duyarlı dil –

+0

@DanielFrey !?: Ben öyle düşünmüyorum - o RFC ayrı bir parçasıdır: " Kural isimleri düzenlemek sayesinde artık mantıklı. –

+0

1 Ben düzenlemeden önce ilk yorum yazdı. gerçi açık olmaktan uzak olduğunu kabul. "harf duyarsız ve evet, o en net spec değil katılıyorum :) –