繁体   English   中英

FreeMarker编码混乱

[英]FreeMarker encoding confusion

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

知道什么是错的吗?

将内容类型属性设置为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;
}

如果您使用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,右键单击它们查找属性。

希望这可以帮助。

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

请参阅Charset问题

与前。 代码:

  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

好吧,无论您认为您的输入是UTF-8编码,它看起来确实如此,实际上它确实是Cp1252编码的。 你可以双重检查,即使用十六进制编辑器。 我是第二个Istao的意见 - 尝试将模板文件处理为本地文件并检查结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM