[英]FreeMarker encoding confusion
當我使用FreeMarker讀取UTF-8編碼模板時,雖然freeMarkerConfig.getDefaultEncoding()
返回“Cp1252”,但在瀏覽器中正確呈現了特殊字符。 如果我設置freeMarkerConfig.setDefaultEncoding("UTF-8")
,我在瀏覽器中只看到問號,盡管“UTF-8”是模板文件的實際編碼。 在每種情況下,都會發送http標頭“Content-Type:text / html; charset = UTF-8”。
知道什么是錯的嗎?
將內容類型屬性設置為FreeMarkerViewResolver。
@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.