我试图让Freemarker将我的模板文件解析为UTF-8,但它似乎总是将它们解析为Cp 1252。
2013-07-30 00:00:00.984 DEBUG freemarker.cache:? Could not find template in cache, creating new one; id=["myFile.ftl"["es_MX",Cp1252,parsed] ]
我进行了搜索,发现添加FTL指令允许我指定编码。
我将其添加到模板文件(保存在UTF-8中,在记事本++中带有BOM),如下所示:
<#ftl encoding="UTF-8">
Estimado Usuario,
Testing this content!
<#/ftl>
但是把这个记在日志里。
MessageTemplateException [message=Unable to process template due to Encountered "<#ftl " at line 1, column 4 in myFile.ftl.
Was expecting one of:
<EOF>
<ATTEMPT> ...
<IF> ...
<LIST> ...
<FOREACH> ...
<SWITCH> ...
<ASSIGN> ...
<GLOBALASSIGN> ...
<LOCALASSIGN> ...
<_INCLUDE> ...
<IMPORT> ...
<FUNCTION> ...
<MACRO> ...
<TRANSFORM> ...
<VISIT> ...
<STOP> ...
<RETURN> ...
<CALL> ...
<SETTING> ...
<COMPRESS> ...
<COMMENT> ...
<TERSE_COMMENT> ...
<NOPARSE> ...
<BREAK> ...
<SIMPLE_RETURN> ...
<HALT> ...
<FLUSH> ...
<TRIM> ...
<LTRIM> ...
<RTRIM> ...
<NOTRIM> ...
<SIMPLE_NESTED> ...
<NESTED> ...
<SIMPLE_RECURSE> ...
<RECURSE> ...
<FALLBACK> ...
<ESCAPE> ...
<NOESCAPE> ...
<UNIFIED_CALL> ...
<WHITESPACE> ...
<PRINTABLE_CHARS> ...
<FALSE_ALERT> ...
"${" ...
"#{" ...
with inputs of {loginUrl=testURL} in myFile.ftl with locale es_MX, code=SUCCESS, arguments=[]]
也许我做得不对?
2条答案
按热度按时间js4nwp541#
不要使用BOM。也不要使用
</#ftl>
,因为只有<#ftl>
。但最重要的是,如果你的大多数模板都是UTF-8,只需将FreeMarker的默认编码设置为UTF-8(在Spring中,类似于<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">...<property name="freemarkerSettings">...<props>...<prop key="default_encoding">UTF-8</prop>
),因此你不需要使用#ftl
。2guxujil2#
我今天遇到了同样的问题,最后找到了使用〈#ftl〉指令的方法,所以如果同样的事情发生在任何人身上:
我的问题是我没有把〈#ftl〉指令放在我的模板上面。一旦我把它放在我的模板的第一行,一切都像魔咒一样工作。