の私は私のプロジェクトでは、以下のような問題があります。生成されたhtmlが表示されますか?代わりに、国際文字
私は私のプロジェクトローカル(およびJarから)、私はうまくコンパイルを処理しています.ftlh
ファイルを実行した場合 - それは何の問題withouthすべての国際文字を示し(ą ę ć
のように)。
私のプロジェクトをクラウドに展開すると、これらのすべての国際文字は?
と表示されます。
<#ftl encoding='UTF-8'>
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
</head>
<body>
そして、私の設定:
@Bean
public freemarker.template.Configuration templateConfiguration() throws IOException {
freemarker.template.Configuration configuration = new freemarker.template.Configuration(freemarker.template.Configuration.VERSION_2_3_24);
configuration.setTemplateLoader(new ClassTemplateLoader(this.getClass(), "/folder"));
configuration.setDefaultEncoding("UTF-8");
configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
configuration.setLogTemplateExceptions(false);
return configuration;
}
そして、これは私がテンプレートを処理する方法である:
が起こっていただきました!私は.ftlh
ファイルに次のように設定しているように私は、見当がつかない
@Qualifier("templateConfiguration")
@Autowired
private Configuration configuration;
public void generateEmail(Order order, OutputStream outputStream) throws IOException, TemplateException {
Template template = configuration.getTemplate(EMAIL, "UTF-8");
OutputStreamWriter out = new OutputStreamWriter(outputStream);
template.process(order, out);
}
私は電子メールを生成し、次の場合はSystem.out.printlnを使用します:
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try{
emailsTemplateService.generateEmail(order, byteArrayOutputStream);
} catch (Exception e){
e.printStackTrace();
}
String htmlMessage = new String(byteArrayOutputStream.toByteArray(), StandardCharsets.UTF_8);
System.out.println(htmlMessage);
国際的な文字でHTMLファイルを印刷します(ローカルで実行している場合)。しかし、私が雲の中を走ると、代わりに?
と表示されます。
私は何が間違っているのかに関するアイデアはありますか?
私はクラウドにデプロイしています。 – uksz
うまく動作します:)ありがとう! – uksz
また、冗長な「UTF-8」-sを削除することもできます。あなたは 'configuration.setDefaultEncoding(" UTF-8 ")'を持っているので、 '#ftl'ヘッダと' getTemplate'パラメータは不要です。本当に重要な点は、バイトからの文字の作成( 'setDefaultEncoding'で指定)と文字からのバイトの作成(' OutputStreamWriter')です。 – ddekany