文本文件编码为UTF8?

时间:2011-10-27 13:37:25

标签: java text encoding character-encoding javamail

我正在编写一个发送带附件的电子邮件的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);
    }

2 个答案:

答案 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正文内容设置正确设置的字符(最后评论)。