JSON RFC, sekcja 2.5, mówi w części:Kodowanie JSON w UTF-16 lub UTF-32
Aby uciec rozszerzony znak, który nie jest w podstawowe Multilingual Samolot, postać jest reprezentowana jako dwunastoznakowa sekwencja, kodująca parę surogatową UTF-16. Na przykład ciąg zawierający tylko znak G-klucz (U + 1D11E) może być reprezentowany jako "\ uD834 \ uDD1E".
Załóżmy, że mam uzasadniony powód, aby kodować JSON jako UTF-16BE (który jest dozwolony). Czy w takim razie nadal konieczne jest unikanie postaci, które nie znajdują się w podstawowej płaszczyźnie wielojęzycznej? Na przykład, zamiast tego:
00 5C 00 75 00 44 00 38 00 33 00 34 00 5C 00 75 00 44 00 44 00 31 00 45
\ u D 8 3 4 \ u D D 1 E
który jest 24-bajtowy UTF-16BE sekwencja bajtów dla \uD834\uDD1E
, jest to legalne, aby to zrobić:
D8 34 DD 1E
czyli użyć UTF- 4-bajtowy 16BE wartości bezpośrednio?
Podobnie, gdybym kodować ten sam ciąg JSON jako UTF-32BE, może po prostu użyć wartości kodu punkt bezpośrednio:
00 01 D1 1E
?
Dobre pytanie. Podejrzewam, że cokolwiek mówi spec, w końcu sprowadza się do wsparcia każdego, kto analizuje JSON. – deceze