2011-10-27 27 views
0

我正在寫一個Java項目發送附件的電子郵件。

在我的測試情況下,我加入一些日語單詞「一些平假名和片假名」我的連接TESTFILE.TXT(我保存在UTF-8編碼。)

但是,當我把我的測試郵件對我來說,打開附件testfile.txt後,每個日文字符變成「????」。文本文件編碼爲UTF_8?

所以我只是想知道爲什麼會發生這種情況......?

謝謝

艾倫

附:更具體一點,這裏是我的代碼。 我正在使用mail.jar發送電子郵件。

這裏是我得到的文件:

/** 
* Add an attachment to the Email. 
* @param filePath 
*/ 
public void setFile(String filePath){ 

    attachment = new File(filePath); 

} 

以下是我如何將文件附加到我的MIME電子郵件的一部分。

/*Add attachment if an attachment is given.*/ 
    if(attachment != null){ 
    MimeBodyPart attachmentPart = new MimeBodyPart(); 
    attachmentPart.attachFile(attachment); 
    multipart.addBodyPart(attachmentPart); 
    } 
+0

你能更具體嗎?你如何打開電子郵件/測試文件?你能發佈一些代碼片段嗎? – alexvetter

回答

6

您需要確保您正在使用正確的字符集讀取和寫入文件。

I.e.因此並非如此,這將使用平臺的默認字符集:

Reader reader = new FileReader("/testfile.txt"); 
// ... 

但越是這樣,使用InputStreamReader其中明確指定正確的字符集:

Reader reader = new InputStreamReader(new FileInputStream("/testfile.txt"), "UTF-8"); 
// ... 

此外,在電子郵件附件的Content-Type頭你必須設置字符集屬性,並且必須使用UTF-8寫出附件。由於您不清楚使用的是什麼郵件API,因此無法提供更多詳細信息。或者,您也可以堅持只使用InputStream/OutputStream,因爲它會將內容作爲純字節流傳輸,因此不會影響字節表示的字符集。


更新:你使用JavaMail的MimeBodyPart沒有明確指定與charset屬性的內容類型。現在,您依賴於郵件客戶端是否將內容視爲UTF-8。解決這個問題如下:

MimeBodyPart attachmentPart = new MimeBodyPart(); 
attachmentPart.attachFile(attachment); 
attachmentPart.setHeader("Content-Type", "text/plain;charset=utf-8"); 
multipart.addBodyPart(attachmentPart); 
+0

這個答案似乎更好地工作:http://stackoverflow.com/questions/4960556/javamail-attachment-from-string-encoding-problem – mortensi

+0

@mortensi:答案解決方法(不解決!)一個完全不同的問題。 – BalusC

+0

我試圖發送一個HTML文件(作爲附件)中的一些斯堪的納維亞字符。我掙扎了一段時間,上面的鏈接爲我解決了這個問題。 – mortensi

0

This thread似乎地址設置爲正確的MIME主體內容(最後的評論)設置字符。