2016-10-05 4 views
1

の私は私のプロジェクトでは、以下のような問題があります。生成された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ファイルを印刷します(ローカルで実行している場合)。しかし、私が雲の中を走ると、代わりに?と表示されます。

私は何が間違っているのかに関するアイデアはありますか?

答えて

3

ほとんどの場合、指定した文字エンコーディングが使用されています。しかし、あなたは1つを忘れました。

この:

OutputStreamWriter out = new OutputStreamWriter(outputStream); 

は、このことが必要です。

OutputStreamWriter out = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8); 

あなたがするOutputStreamWriterのエンコードを指定していないので、それは2つのプラットフォームのために異なっていたプラットフォームのデフォルトエンコーディングを、取りましたあなたはコードを実行しました(それはクラウド上でUTF-8ではありませんでした)

+0

私はクラウドにデプロイしています。 – uksz

+0

うまく動作します:)ありがとう! – uksz

+0

また、冗長な「UTF-8」-sを削除することもできます。あなたは 'configuration.setDefaultEncoding(" UTF-8 ")'を持っているので、 '#ftl'ヘッダと' getTemplate'パラメータは不要です。本当に重要な点は、バイトからの文字の作成( 'setDefaultEncoding'で指定)と文字からのバイトの作成(' OutputStreamWriter')です。 – ddekany

関連する問題