FreeMarker编码混乱

时间:2010-08-08 11:12:21

标签: java character-encoding freemarker

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

知道出了什么问题吗?

4 个答案:

答案 0 :(得分:3)

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

Spring 4.2示例

en_US.UTF-8

答案 1 :(得分:1)

如果您使用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,如果您正在使用eclipse IDE,请右键单击它们。

希望这有帮助。

答案 2 :(得分:0)

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

请参阅Charset issues

与前。代码:

  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();

您还可以在FileWriterWithEncoding中使用commons io

答案 3 :(得分:0)

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