Как обработанный кодировщик unson должен обрабатываться парсерами и кодировщиками json? - PullRequest
8 голосов
/ 04 октября 2009

Спецификация json позволяет использовать экранированный юникод в строках json (вида \ uXXXX). В частности, он упоминает ограниченную кодовую точку (нехарактер) как допустимую экранированную кодовую точку. Не означает ли это, что парсеры должны генерировать недопустимый юникод из строк, содержащих нехарактеры и ограниченные кодовые точки?

Пример:

{ "key": "\uFDD0" }

для расшифровки либо требуется, чтобы ваш синтаксический анализатор не пытался интерпретировать экранированную кодовую точку, либо он генерирует недопустимую строку в кодировке Юникод не так ли?

Ответы [ 2 ]

5 голосов
/ 31 октября 2009

Когда вы декодируете, кажется, что это будет подходящее использование для символа замены юникода , U+FFFD.

С База данных символов Unicode :

  • используется для замены входящего символа, значение которого неизвестно или непредставимо в Юникоде
  • сравнить использование U + 001A в качестве управляющего символа для указания замещающей функции
3 голосов
/ 04 октября 2009

Что вы подразумеваете под «ограниченной кодовой точкой»? На какую спецификацию вы смотрите, что использует этот язык? (Я не могу найти такого.)

Если вы говорите о суррогатах, то да: JavaScript почти ничего не знает (*) о суррогатах и ​​рассматривает все кодовые точки UTF-16 в любой последовательности как допустимые. JSON, будучи ограничен тем, что поддерживает JavaScript, делает то же самое.

*: единственная часть JS, о которой я могу думать, которая делает что-то особенное с суррогатами, - это функция encodeURIComponent, поскольку она использует кодировку UTF-8, в которой попытка кодировать недопустимую суррогатную последовательность не может работать. Если вы попытаетесь:

encodeURIComponent('\ud834\udd1e'.substring(0, 1))

вы получите исключение.

(Gah! SO, похоже, не позволяет напрямую размещать символы вне Базовой многоязычной плоскости. Tsk.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...