Как избежать символов Юникода при обработке шаблона freemarker? - PullRequest
0 голосов
/ 25 мая 2018

Я использую шаблоны свободных маркеров для преобразования JSON в XML.Он работает хорошо, за исключением случаев, когда входной JSON содержит символы Unicode.До сих пор я сталкивался с en-dash и em-dash, и преобразование FTL завершается неудачно с: lexical error: encountered "u" (117)

Шаблон не выполняется, когда я использую операцию? Eval для переменной.

Я использую freemarker v2.3.28 и установил кодировку UTF-8.

PS Я проверил, что символы авторских прав и товарных знаков работают нормально.

1 Ответ

0 голосов
/ 25 мая 2018

Проблема, безусловно, заключается в том, что эти символы экранированы в исходном JSON как \uXXXX, но синтаксис строки FTL не имеет \u escape.?eval интерпретирует свой ввод как выражение FTL, а не как выражение JSON.Они похожи, но есть различия.(Кстати, насколько мне известно, в JSON не нужно экранировать en-dash и em-dash, аналогично авторскому праву, но, конечно, разрешается экранировать любой символ.)

Что делать?Подход FreeMarker-ish добавляет JSON к вашей модели данных, уже проанализированной в Map -s (или Java-бины) и List -s и тому подобное.Шаблон не предназначен для анализа ввода.Если это невозможно, вы можете добавить свой пользовательский метод в модель данных (возможно, как разделяемую переменную на уровне Configuration), который выполняет настоящий анализ JSON, и затем вы называете его как eval_json(x).

* 1011.* В любом случае, каков вариант использования?Желание проанализировать JSON внутри шаблона часто возникает в SO.Возможно, следующая версия FreeMarker должна иметь ?eval_json, если сценарий использования действителен.
...