10

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

知道有什么问题吗?

4

4 回答 4

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;
}
于 2016-03-29T18:04:32.243 回答
2

如果您使用 spring 框架和 MimeMessage 发送电子邮件,请尝试通过 MimeMessagePreparator 设置内容,如下所示(我跳过 mimemessagepreparator 方法 getMessagePreparator,因为重要的是如何设置内容):

// Create the message helper from the received mimemessage on the preparator
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
// ... include the from, to, subject, freemarker html generation here... text is the String variable with generated html
// Set the content as follows instead of helper.setText(text, true);
helper.getMimeMessage().setContent(text, "text/html;charset=utf-8");

这对我有用,并且浏览器在发送电子邮件时正确显示字符。

隐含的类是:

import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import javax.mail.internet.MimeMessage;

如果您使用的是 Eclipse IDE,请确保您的工作区具有模板文件的默认编码 UTF-8,方法是右键单击它们查找属性。

希望这可以帮助。

于 2016-09-27T16:09:13.273 回答
0

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

请参阅字符集问题

与前。代码 :

  Template templévénmts;
  BufferedWriter writ;
  OutputStreamWriter encodé;

  encodé = new OutputStreamWriter(
   new FileOutputStream(new File(f_dirDestination, résultat)), "UTF-8");
  writ = new BufferedWriter(
   encodé);
  templévénmts = f_freemarker.getTemplate(modèle);
  templévénmts.process(f_rootDatas, writ);
  writ.close();

您还可以在commons io中使用FileWriterWithEncoding

于 2010-08-08T13:47:06.147 回答
0

好吧,不管您认为您的输入是 UTF-8 编码的事实,它看起来确实像,实际上它确实是 Cp1252 编码的。你可以仔细检查一下,即使用十六进制编辑器。我同意 Istao 的意见 - 尝试将您的模板文件处理为本地文件并检查结果。

于 2010-08-09T16:19:47.980 回答