FreeMarker编码混乱

dea*_*mon 7 java freemarker character-encoding

当我使用FreeMarker读取UTF-8编码模板时,在浏览器中正确呈现特殊字符,但freeMarkerConfig.getDefaultEncoding()返回"Cp1252".如果我设置freeMarkerConfig.setDefaultEncoding("UTF-8"),我只在浏览器中看到问号,尽管"UTF-8"是模板文件的实际编码.在每种情况下,都会发送http标头"Content-Type:text/html; charset = UTF-8".

知道什么是错的吗?

Dan*_*eón 5

将内容类型属性设置为 FreeMarkerViewResolver。

Spring 4.2 示例

@Bean
public FreeMarkerViewResolver freemarkerViewResolver() {
    FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
    resolver.setContentType("text/html; charset=utf-8");
    resolver.setCache(true);
    resolver.setPrefix("");
    resolver.setSuffix(".ftl.html");
    resolver.setRequestContextAttribute("rc");
    return resolver;
}
Run Code Online (Sandbox Code Playgroud)


Ist*_*tao 0

输出编码是你的java机器的编码。如果您使用 UTF-FOO 创建输出文件,并将该输出文件传递给 freemarker 生成,则输出编码将为 UTF-FOO。

\n\n

请参阅字符集问题

\n\n

与前任。代码 :

\n\n
  Template templ\xc3\xa9v\xc3\xa9nmts;\n  BufferedWriter writ;\n  OutputStreamWriter encod\xc3\xa9;\n\n  encod\xc3\xa9 = new OutputStreamWriter(\n   new FileOutputStream(new File(f_dirDestination, r\xc3\xa9sultat)), "UTF-8");\n  writ = new BufferedWriter(\n   encod\xc3\xa9);\n  templ\xc3\xa9v\xc3\xa9nmts = f_freemarker.getTemplate(mod\xc3\xa8le);\n  templ\xc3\xa9v\xc3\xa9nmts.process(f_rootDatas, writ);\n  writ.close();\n
Run Code Online (Sandbox Code Playgroud)\n\n

您还可以在commons io中使用FileWriterWithEncoding

\n