2009-05-19 64 views
1

我們的應用程序從Web表單獲取文本並通過電子郵件將其發送給適當的用戶。但是,當有人複製/粘貼臭名昭着的「聰明語錄」或Word中的其他特殊字符時,事情會變得多毛。MimeMessage中的智能引號在Outlook中無法正確顯示

用戶類型,他說「你好」給我,這難道不是很好嗎?

但是,當出現在Outlook 2003中的郵件,它出來是這樣的:

他打招呼meisnt那該多好?

的代碼,這是:

Session session = Session.getInstance(props, new MailAuthenticator()); 
Message msg = new MimeMessage(session); 

//removed setting to/from addresses to simplify 

msg.setSubject(subject); 
msg.setText(text); 
msg.setHeader("X-Mailer", MailSender.class.getName()); 
msg.setSentDate(new Date()); 
Transport.send(msg); 

一個小小的研究之後,我想這可能是一個字符編碼的問題,並試圖東西搬到UTF-8。所以,我正是如此更新的代碼:

Session session = Session.getInstance(props, new MailAuthenticator()); 
MimeMessage msg = new MimeMessage(session); 

//removed setting to/from addresses to simplify 

msg.setHeader("X-Mailer", MailSender.class.getName()); 
msg.addHeader("Content-Type", "text/plain"); 
msg.addHeader("charset", "UTF-8"); 
msg.setSentDate(new Date()); 
Transport.send(msg); 

這讓我更接近,但沒有雪茄:

他說,「helloÂ」到MEA-isnÂ't那該多好?

我無法想象這是一個不常見的問題 - 我錯過了什麼?

+0

charset是一個Content-Type選項,不是一個單獨的頭文件。否則,它看起來不錯。 – Piskvor 2009-05-30 07:52:16

回答

1

與您的窗體的頁面也使用UTF-8或不同的字符集?如果您沒有指定網頁字符集,則任何人都會猜到腳本中的數據格式。


編輯:在該消息中的字符集應設置這樣的:

msg.addHeader("Content-Type", "text/plain; charset=UTF-8"); 

因爲字符集是不是一個單獨的標題,但一個選項,以內容類型

+0

嘗試設置頁面字符集。 (UTF-8)。我認爲這取決於資源管理器轉換粘貼的字符。 「測試」 – KarlP 2009-05-19 16:52:54

0

爲什麼不用常規的主引號替換好的引號?

+1

這當然是一個選擇,但如果我可以避免必須創建一個「替換」規則的地圖,我想。 – abeger 2009-05-19 16:01:10

0

我會檢查從瀏覽器接收的數據是正確的 - 轉儲Unicode代碼點並檢查它們是否與charts

public static void printCodepoints(char[] s) { 
    for (int i = 0; i < s.length; i++) { 
     int codePoint = Character.isHighSurrogate(s[i]) ? Character 
      .toCodePoint(s[i], s[++i]) 
      : s[i]; 
     System.out.println(Integer.toHexString(codePoint)); 
    } 
    } 

例如,符號DOUBLE LEFT QUOTATION MARK(&#x201C;)是字符U + 201C。

我使用郵件API已經很長時間了,但MimeMessage.html.setText(text, charset)方法可能值得一看。有關setText(String)的文檔說它使用默認字符集(如果您使用的是英文/拉丁文-1 Windows,則可能是windows-1252)。

0

IIRC,微軟辦公室報價被發現字符集「ISO-8859-1」。

+0

不,他們不是。他們在許多MS Office代碼頁面中,其中一些相當接近和「擴展」了相應ISO拉丁字符集的版本。 – tripleee 2011-09-29 13:15:22

相關問題