我正在编写一个发送带附件的电子邮件的Java项目。
在我的测试用例中,我将一些日语单词“some Hiraganas and Katakanas”添加到我附加的testfile.txt(我以UTF-8编码保存。)
但是当我发送测试邮件给自己时,在我打开附带的testfile.txt之后,每个日语字符都变成了“????”。
所以我只是想知道为什么会这样......?
谢谢
阿伦
P.S。更具体地说,这是我的代码。 我使用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 :(得分:6)
您需要确保使用正确的字符集来读取和写入文件。
即。因此不是这样,哪个会使用平台的默认字符集:
Reader reader = new FileReader("/testfile.txt");
// ...
但更重要的是,使用InputStreamReader
,其中您明确指定了正确的字符集:
Reader reader = new InputStreamReader(new FileInputStream("/testfile.txt"), "UTF-8");
// ...
此外,在电子邮件附件的Content-Type
标题中,您必须设置charset属性,并且必须使用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);
答案 1 :(得分:0)
This thread似乎解决了为mime正文内容设置正确设置的字符(最后评论)。