Я пишу парсер JSON в Xojo.Это работает помимо того факта, что я не могу понять, как кодировать и декодировать строки Unicode, которые не находятся в основной многоязычной плоскости (BMP).Другими словами, мой парсер умирает, если сталкивается с чем-то большим, чем \uFFFF
.
Спецификации говорят:
Чтобы избежать кодовой точки, которая не находится в базовой многоязычной плоскости, символ может быть представлен в виде последовательности из двенадцати символов, кодирующей UTF-16суррогатная пара, соответствующая кодовой точке.Так, например, строка, содержащая только символ G clef (U + 1D11E), может быть представлена как «\ uD834 \ uDD1E».Однако то, интерпретирует ли процессор текстов JSON такую суррогатную пару как одну кодовую точку или как явную суррогатную пару, является семантическим решением, которое определяется конкретным процессором.
Что я не делаюпонять, каков алгоритм перехода от U+1D11E
к \uD834\uDD1E
.Я не могу найти никакого объяснения того, как «кодировать суррогатную пару UTF-16, соответствующую кодовой точке».
Например, скажем, я хочу кодировать символ смайлика (U+1F600
).Что это будет за суррогатная пара UTF-16 и как она работает?
Может ли кто-нибудь, по крайней мере, указать мне правильное направление?