Расшифровка значений JSON Unicode в Java с помощью PHP - PullRequest
1 голос
/ 29 октября 2010

Я испытывал разные значения в кодировке JSON для одной и той же строки в зависимости от языка, который использовался в прошлом.Поскольку API-интерфейсы использовались в закрытой среде (третьи лица не допускаются), мы пошли на компромисс, и все наши приложения Java кодируют символы Unicode вручную.API LinkedIn возвращает «поврежденные» значения, в основном такие же, как наши Java-приложения.Я уже разместил вопрос на их форуме, причина, по которой я тоже его здесь задаю, довольно проста;делиться заботой :) Этот вопрос поэтому частично связан с LinkedIn, но в основном пытается найти ответ на общую проблему кодирования, описанную ниже.

Как вы можете видеть, моя фамилия содержит букву ž,это должно быть \u017e, но Java (или API LinkedIn в этом отношении) возвращает \u009e с JSON и ничего с XML-ответом.PHP json_decode() игнорирует это, и моя фамилия становится Kurida.

После расследования я обнаружил, что ž, по-видимому, имеет два представления: 9e и 17e .Что именно здесь происходит?Есть ли решение этой проблемы?

1 Ответ

0 голосов
/ 29 октября 2010

U + 009E является обычно невидимым управляющим символом и не является приемлемым альтернативным представлением для ž.

Байт 0x9E представляет символ ž в кодовой странице Windows 1252Этот байт, если его декодировать с использованием ISO-8859-1, превратится в U + 009E.

(Путаница возникает из-за того факта, что если вы пишете ž на HTML-странице, браузер нефактически дает вам символ U + 009E, как и следовало ожидать, но преобразует его в U + 017E. То же самое верно для всех ссылок на символы 0080–009F: они меняются, как если бы числа ссылались на байты cp1252 вместо символов Юникода.Это совершенно странное и неправильное поведение, но все основные браузеры делают это, поэтому мы застряли с ним сейчас. За исключением правильного XHTML, который используется в качестве XML, поскольку он должен следовать более разумным правилам XML.)

Глядя на страницу форума, JSON-чтение явно не так: ваше имя зарегистрировано как «David Kurid [U + 009E] a».Однако эти данные попали в их системные потребности, глядя на.

...