簡體   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