Спецификация JSON требует поддержки UTF-8 декодерами. В результате все JSON-декодеры могут обрабатывать UTF-8 так же хорошо, как они могут обрабатывать числовые escape-последовательности. Это также относится и к интерпретаторам Javascript, что означает, что JSONP также будет обрабатывать кодированный в UTF-8 JSON.
Возможность кодировщикам JSON использовать числовые escape-последовательности вместо этого просто предлагает вам больший выбор. Одна из причин, по которой вы можете выбрать числовые escape-последовательности, заключается в том, что транспортный механизм между вашего кодировщика и предполагаемым декодером не является бинарно-безопасным.
Другая причина, по которой вы можете захотеть использовать числовые escape-последовательности, состоит в том, чтобы предотвратить появление в потоке определенных символов, таких как <
, &
и "
, которые могут интерпретироваться как последовательности HTML, если размещен код JSON без перехода в HTML или браузер неправильно интерпретирует его как HTML. Это может быть защита от внедрения HTML или межсайтового скриптинга (примечание: некоторые символы ДОЛЖНЫ быть экранированы в JSON, включая "
и \
).
Некоторые фреймворки, включая реализацию PHP JSON, всегда выполняют числовые escape-последовательности на стороне кодировщика для любого символа вне ASCII. Это предназначено для максимальной совместимости с ограниченными транспортными механизмами и тому подобным. Однако это не следует интерпретировать как указание на то, что у JSON-декодеров есть проблема с UTF-8.
Итак, я думаю, вы просто могли решить, что использовать следующим образом:
Просто используйте UTF-8, если только ваш метод хранения или передачи между кодером и декодером не является бинарно-безопасным.
В противном случае используйте числовые escape-последовательности.