我正在编写一个 Java 项目,发送带有附件的电子邮件。
在我的测试用例中,我将一些日语单词“一些平假名和片假名”添加到附加的 testfile.txt(我以 UTF-8 编码保存)。
但是当我向自己发送测试电子邮件时,在打开附加的 testfile.txt 后,每个日语字符都变成了“???”。
所以我只是想知道为什么会发生这种情况......?
谢谢
艾伦
附注更具体地说,这是我的代码。 我正在使用 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);
}
最佳答案
您需要确保使用正确的字符集读取和写入文件。
即因此不是这样,它将使用平台的默认字符集:
Reader reader = new FileReader("/testfile.txt");
// ...
但更重要的是,使用 InputStreamReader
其中您明确指定正确的字符集:
Reader reader = new InputStreamReader(new FileInputStream("/testfile.txt"), "UTF-8");
// ...
此外,在电子邮件附件的 Content-Type
header 中,您必须设置字符集属性,并且必须使用 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);
关于java - 文本文件编码为UTF_8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7916674/