2009-06-10 21 views
1

我遇到類似的問題described in this question:我正在使用「mailto」協議從Java打開默認郵件客戶端(我現在綁定到Java 5,所以可悲的是我不能使用Desktop API)。使用mailto時Outlook不處理多字節字符:

某些電子郵件包含日文文本。字符串已經被UTF-8編碼如下:

private void email(String to, String subject, String body) 
{ 
    String encodedSubject = URLEncoder.encode(subject, "UTF-8"); 
    String encodedBody = URLEncoder.encode(body, "UTF-8"); 

    String mailto = "mailto:" + to + "?subject=" + encodedSubject + 
     "&body=" + encodedBody; 
    String cmd = "cmd.exe /c start \"\" \"" + mailto + "\""; 
    Runtime.getRuntime().exec(cmd); 
} 

的日語字符正確編碼到其URL當量,所以 「平」 變成 「%E5%B9%B3」,例如;但是,當Outlook打開新郵件窗口時,三字節字符被解釋爲三個不同的字符 - 因此「%E5%B9%B3」被解釋爲「å¹³」。

我相當確信,問題在於前景,因爲以下HTML片段產生同樣的效果(SO似乎沒有允許的mailto標籤內,所以我不能提供直接鏈接,不好意思):

<html> 
    <body> 
    <a href="mailto:[email protected]?subject=%E5%b9%B3">click me to test!</a> 
    </body> 
</html> 

簡而言之,如何說服Outlook在從mailto鏈接中正確解釋多字節字符?

編輯:要回答Johannes的問題:我們有一個Java應用程序,在執行某些操作時發送電子郵件。每個電子郵件的標準文本都是從資源包中提取的,在大多數情況下,我們使用JavaMail API時沒有任何問題;但在這種情況下,用戶需要在發送之前定製電子郵件。

如果任何人都可以建議產生相同效果的非cmd.exe方式(帶有主題和身體預填充的新郵件窗口) - 並記住我們與Java 5綁定,所以桌面API可悲地不是一種選擇 - 我會很開心!

+0

不管這是一個問題,你是否因爲工作的客戶端或服務器端的mailto仍然需要由客戶解釋。在這裏看到我的類似問題:http://stackoverflow.com/questions/1472506/broken-accented-characters-in-a-mailto-link。恕我直言,它不能做到。 – AyexeM 2009-09-24 17:07:53

回答

0

您沒有指定任何編碼,因此Outlook(或將地址提供給Outlook的人)只能猜測。如果是HTMl片段,請嘗試在<head>中明確指定編碼(UTF-8)是否會更改該行爲。

就cmd而言,它無法真正應對UTF-8。儘管有問題,但它將Unicode處理爲UTF-16。

當我在這裏嘗試此操作時(Windows Live Mail而不是Outlook),主題中的所有內容都會轉換爲遺留代碼頁,因此CJK應該存在問題。

但是,我想知道你爲什麼試圖錯誤地使用cmd來讓用戶編寫郵件。那裏確實有更好的選擇(即使我目前不知道,因爲我從來不需要它)。

0

我猜你的Java郵件工作正常 但要確定,請嘗試切換到 JavaMail

看看this的帖子。Outlook 2003中默認情況下無法正確識別HTML郵件的字符編碼(在許多情況下),即使它們包含適當的標籤:

<meta http-equiv="content-type" content="text/html; charset=UTF-8"> 

您可以切換到Outlook 2007和/或在編輯器中打開該郵件,並調整消息屬性:

  • 打開消息
  • 編輯 - >編輯短信
  • 格式 - >編碼 - >選擇新的編碼
  • 文件 - >保存

編輯:問題改變後的更正。

編輯2:抱歉,沒有閱讀完整的問題。

我看到你有Java 5約束,但如果實現也與Windows綁定,請考慮使用基於JNI/JNA的解決方案(不幸的是,我不能給你鏈接)。我也會看看OpenJDK的桌面API實現,並從中提取方法。

另一種選擇是以某種方式傳遞消息而不使用URLEncoding它?

另外,如果用戶需要在發送之前定製消息,則可以在應用程序中爲其提供一個簡單的編輯器,並仍然通過JavaMail發送消息。

您也可以爲用戶提供準備郵件的合作方式,將其放入剪貼板併爲用戶打開電子郵件客戶端。然後用戶只需要發出一個CTRL + V來粘貼準備好的文本。

1

你可以試試這個:

有一個叫一個選項:啓用的mailto UTF-8支持:協議在Outlook @

工具>選項>郵件格式>國際選項> [X]啓用UTF -8用於郵寄地址的支持:協議

讓我們希望它爲你工作

+0

同樣的設置也在IE中;工具 - > Internet選項 - >高級 - >國際。默認情況下在XP上禁用,Win7默認啓用。 – 2012-10-29 13:49:17

1

主題是不行了我的Windows Live Mail,但收件人的顯示名稱沒有。 當evertything是UTF-8編碼時,Android可以正常工作,但Windows Live Mail在「To:」中顯示一些符號,而「Subject:」正確。當我使用UTF-16作爲「To:」時,Windows Live Mail現在可以工作,但Android仍然將其作爲UTF-8 ...

相關問題