我正在尝试在 Freemarker 中生成的 HTML 文件中输出大引号。模板文件包含:
Kevin’s
生成 HTML 文件后,结果如下:
Kevin?s
起初我以为问题发生在 HTML 文件的生成过程中。但我能够追踪到读入模板时的转换。有谁知道如何防止 Freemarker 在读取模板时进行此转换?我的转换代码:
// Freemarker configuration object
Configuration cfg = new Configuration(new Version(2, 3, 21));
try
{
cfg.setDirectoryForTemplateLoading(new File("templates"));
cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER);
// Load template from source folder
Template template = cfg.getTemplate("curly.html");
template.setEncoding("UTF-8");
// Build the data-model
Map<String, Object> data = new HashMap<String, Object>();
// Console output
Writer out = new OutputStreamWriter(System.out);
template.process(data, out);
out.flush();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (TemplateException e)
{
e.printStackTrace();
}
最佳答案
如果模板文件确实包含 Kevin's
,那么输出也将是 Kevin's
(因为 FreeMarker 不解析 HTML 实体) ,所以我想你的意思是带有该代码的字符作为一个字符存在。在这种情况下,最有可能的罪魁祸首与 FreeMarker 无关:new OutputStreamWriter(System.out)
。您在那里省略了构造函数的编码参数,因此它将使用系统默认编码。即使您确实指定了这一点,您的控制台也有固定的编码(顺便说一句,这不一定是系统默认的编码)。因此,请尝试通过为 OutputStreamWriter
显式指定 UTF-8 将输出写入文件。如果输出仍然错误,请检查您是否确实使用UTF-8创建模板文件并读取输出文件。
顺便说一句,template.setEncoding
不是必需的。删除它。
关于java - Freemarker 在读取 ftl 文件时转换 HTML ISO 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28185909/