10

FreeMarker を使用して UTF-8 でエンコードされたテンプレートを読み取ると、freeMarkerConfig.getDefaultEncoding()"Cp1252" が返されますが、特殊文字はブラウザーで正しくレンダリングされます。を設定freeMarkerConfig.setDefaultEncoding("UTF-8")すると、テンプレート ファイルの実際のエンコーディングは「UTF-8」ですが、ブラウザには疑問符しか表示されません。いずれの場合も、http ヘッダー「Content-Type: text/html; charset=UTF-8」が送信されます。

何が間違っているのですか?

4

4 に答える 4

5

コンテンツ タイプ プロパティを FreeMarkerViewResolver に設定します。

春 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;
}
于 2016-03-29T18:04:32.243 に答える
2

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 であることを確認してください。

お役に立てれば。

于 2016-09-27T16:09:13.273 に答える
0

出力エンコーディングは、Java 機械のエンコーディングです。UTF-FOO で出力ファイルを作成し、この出力ファイルを freemarker 生成に渡すと、出力エンコーディングは UTF-FOO になります。

文字セットの問題を参照してください。

元と。コード:

  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を使用することもできます。

于 2010-08-08T13:47:06.147 に答える
0

入力が UTF-8 でエンコードされていると思っていても、実際には Cp1252 でエンコードされているように見えます。16 進エディタなどで再確認できますか。Istao の意見に賛成です。テンプレート ファイルをローカル ファイルに処理して、結果を確認してください。

于 2010-08-09T16:19:47.980 に答える