2012-01-04 47 views
0

我目前正在從一臺服務器上以多種語言向客戶發送郵件的模塊。郵件標題中Unicode字符的翻譯

  • 我已將郵件內容(主題和正文)存儲在數據庫中並從中檢索。

  • 所有郵件內容存儲在DB爲Unicode(如:ضنتةى顯示阿拉伯字符)

  • 我使用Apache的公共電子郵件API來發送郵件。 (版本:commons-email-1.1.jar)。

  • 編碼在JAVA中。

  • 使用Gmail SMTP主機發送的郵件。

  • 當客戶發送和接收郵件時 - >郵件正文被翻譯並顯示阿拉伯字符。

問題:受試者顯示unicode的,因爲它是在我的數據庫。翻譯不會發生。

我知道,一些郵件頭配置必須完成,但不知道如何和如何。 另外RFC 2047似乎提供了一個解決方案,但我該如何使用這個特定的RFC?

在此先感謝。 -Chandan

+2

這不是Unicode,這些都是Unicode HTML實體。您需要在某些時候將它們轉換爲「物理」Unicode編碼,如UTF-8。 – deceze 2012-01-04 12:43:27

回答

3

由於@deceze說你不「真的」與unicode一起工作。您正在使用HTML表示法來標記unicode字符。您的電子郵件正文被格式化爲HTML,因此電子郵件客戶端就像瀏覽器一樣解釋它們。

電子郵件主題不是HTML格式化主體的一部分,因此未正確顯示。

您應該切換到真正使用unicode,即將數據庫編碼定義爲UTF-8,並在其中存儲unicode文本,以便您不會看到類似ضنتةى的文本,但會看到ضنتةى。

在這種情況下,一切都會奏效。如果因爲任何原因你不能這樣做,你必須在你的java代碼中執行「翻譯」。

除了此譯文,您應指定文檔方向rtl - 從右到左。否則文本將在默認的從左到右的文檔方向上被調整到系統左側。

+0

謝謝亞歷克斯。這很脆。正如你所說,我不打擾數據庫。相反,我沒有逃過這樣的「Unicode HTML實體」 - StringEscapeUtils.unescapeHtml(「ض ن ت ة ى」);這兩個都是電子郵件主題和正文顯得很好。乾杯... – Chandan 2012-01-05 07:55:12

0
+0

謝謝雷米。我確實經歷了RFC,這很有幫助。我解決了這個問題。再次感謝。 – Chandan 2012-01-05 07:57:26