如何在freemarker模板处理中转义unicode符号?

如何在freemarker模板处理中转义unicode符号?,unicode,freemarker,org.json,Unicode,Freemarker,Org.json,我正在使用freemarker模板将JSON转换为XML。除了输入json包含一些unicode符号外,它工作正常。 到目前为止,我遇到了en dash和em dash,FTL转换失败: 词法错误:遇到“u”(117) 当我对变量使用?eval操作时,模板失败 我使用的是freemarker v2.3.28,我已经将编码设置为UTF-8 另外,我检查了版权和商标符号是否正常工作。问题当然是这些字符在源JSON中被转义为\uxxx,但FTL字符串语法没有\u转义?eval将其输入解释为FTL表达式

我正在使用freemarker模板将JSON转换为XML。除了输入json包含一些unicode符号外,它工作正常。 到目前为止,我遇到了en dash和em dash,FTL转换失败:
词法错误:遇到“u”(117)

当我对变量使用?eval操作时,模板失败

我使用的是freemarker v2.3.28,我已经将编码设置为UTF-8


另外,我检查了版权和商标符号是否正常工作。

问题当然是这些字符在源JSON中被转义为
\uxxx
,但FTL字符串语法没有
\u
转义<代码>?eval将其输入解释为FTL表达式,而不是JSON表达式。它们恰巧相似,但也存在差异。(顺便说一句,据我所知,en-dash和em-dash不需要在JSON中转义,类似于版权,但当然可以转义任何字符。)

怎么办?FreeMarker-ish方法是将JSON添加到已经解析为
Map
-s(或javabean)和
List
-s等的数据模型中。该模板不用于分析输入。如果这不可行,那么您可以将自定义方法添加到数据模型(可能作为
配置
-级别的共享变量)中,该模型执行真正的JSON解析,然后您可以像
eval_JSON(x)
那样调用它


不管怎样,用例是什么?在模板中解析JSON的愿望经常出现。如果用例有效,下一个FreeMarker版本可能应该有一个
?eval_json

首先通过将所有unicode替换为html实体来预处理变量

replaceAll("\\\\u(....)", "&#x$1;")

这是如何解决问题的?我问这个问题是因为我仍然很好奇
?eval_json
是否是一个好主意,它是否有一个频繁且正确的用例。谢谢@ddekany!!早些时候,当我尝试freemarker模板时,我只解析了顶级json对象和我使用的任何嵌套对象?eval。在我得到这些unicode符号之前,它一直在工作。根据您的建议,现在我正在解析整个JSON,然后再将其传递给模板,它工作正常。出于好奇,如何检查这些字符在源JSON中是否转义为\uxxx?我直接从elasticsearch获取json。不过eval_json会很好!现在我只是将整个json解析为一个映射,并将其传递给模板。附言:我确认在我的例子中提到的所有unicode符号都失败了。@noobCoder我相信预先解析整个JSON是正确的方法。这当然比记住在模板中调用
?eval_json
容易。“是不是?”noobCoder说到这个问题,我肯定我能理解。您可以在字符串中搜索前面没有\的
\u