2012-01-04 11 views
0

現在、私は、サーバから複数の言語で顧客にメールを送信するモジュールを開発中です。メールヘッダ内のUnicode文字の翻訳

  • 私は、メールの内容(件名、本文)をデータベースに保存し、そこから取得しています。

  • すべてのメールの内容をUnicodeとしてDBに格納されている(例えば:アラビア文字を表示するためにضنتةى

  • 私がメールを送信するためにApacheのコモンズ・メールAPIを使用しています。 (バージョン:commons-email-1.1.jar)。

  • JAVAでコード化されています。

  • Gmail SMTPホストを使用してメールを送信しました。

  • お客様がメールを送受信した場合 - >本文が翻訳され、アラビア文字が表示されます。

問題:それは私のDBにあるよう被験者はユニコードを示しています。翻訳は行われません。

私はいくつかのメールヘッダーの設定が必要であることを認識していますが、内容と方法は不明です。 また、RFC 2047は解決策を提供するようですが、この特定のRFCをどのように使用しますか?

ありがとうございます。 -Chandan

+2

ユニコードではありません、それらは、Unicode HTMLエンティティです。ある時点でそれらをUTF-8のような "物理的な" Unicodeエンコーディングに変換する必要があります。 – deceze

答えて

3

@decezeは、あなたが「本当に」ユニコードで作業しないと言いました。ユニコード文字をマークするためにHTML表記を使用しています。電子メールの本文はHTML形式になっているため、電子メールクライアントはブラウザと同様に解釈します。

電子メールの件名はHTML形式の本文に含まれていないため、正しく表示されません。

実際にUnicodeを使用するように切り替える必要があります。すなわち、DBエンコーディングをUTF-8として定義し、そこにユニコードテキストを保存すると、ضنتةىのようなテキストは表示されませんが、代わりにضنتةىが表示されます。

この場合はすべて動作します。あなたが何らかの理由でこれを行うことができない場合は、あなたのJavaコードで "翻訳"を実行する必要があります。

さらに、この翻訳には、文書の向きを右から左に指定する必要があります。rtl - 右から左。それ以外の場合、デフォルトの左から右の文書方向を持つシステムでは、テキストは左に調整されます。

+0

ありがとうアレックス。それは鮮明だった。あなたが言ったように、私はデータベースを邪魔しないようにしています。むしろ、私はこのように "Unicode HTMLエンティティ"をエスケープしませんでした - StringEscapeUtils.unescapeHtml( "ض ت ة ى");どちらも電子メールの件名で、ボディは正常に表示されます。乾杯... – Chandan

0
+0

ありがとうレミー。私はRFCを通過しました、それは役に立ちました。私はこの問題を解決しました。再度、感謝します。 – Chandan

関連する問題