java - Freemarker 在读取 ftl 文件时转换 HTML ISO 标签

标签 java freemarker

我正在尝试在 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/

相关文章:

java - 如何使用 Spring Data 多次保存同一个对象?

java - 从嵌套 HashMap 中检索值

freemarker - Freemarker 模板中的 Keycloak 访问 cookie 和/或 url 查询参数

FREEMARKER:避免转义 HTML 字符

java - 我可以将主体属性(而不是子属性)拉到我的 sitemesh/freemarker 装饰器中吗?

html - 不使用行类的两列网格

java - JPA的getResultList()返回哪种类型的列表

java - 如何返回具有两位小数的 double ?

Java 8 分组依据的逆向

javascript - 如何从 Freemarker 调用 JavaScript 函数?