当我使用FreeMarker读取UTF-8编码模板时,虽然freeMarkerConfig.getDefaultEncoding()
返回“Cp1252”,但在浏览器中会正确呈现特殊字符。如果我设置freeMarkerConfig.setDefaultEncoding("UTF-8")
,我只会在浏览器中看到问号,尽管“UTF-8”是模板文件的实际编码。在每种情况下都会发送http标题“Content-Type:text / html; charset = UTF-8”。
知道出了什么问题吗?
答案 0 :(得分:3)
将内容类型属性设置为FreeMarkerViewResolver。
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的观点 - 尝试将模板文件处理为本地文件并检查结果。