java - 文本文件编码为UTF_8?

标签 java text encoding character-encoding jakarta-mail

我正在编写一个 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/

相关文章:

ios - 如何正确编码 URL 字符串

java - Office 365 Activity 日志

javascript - 评论框添加文本值而不使用html

matlab - 有没有办法屏蔽 MATLAB 编辑框中的文本?

java - 如何仅将具有 xml 标签的文本文件中的某些元素打印到新文本文件中?

c# - 获取角色的替代代码

java - 使用 Java 和 UTF-8 编码生成有效的 XML

java - Intellij Idea 自动即时更换

java - 'the local character set' 与 'the encoding of the text data you want to process' 相同吗?

java - 如何将复杂的java对象(嵌套映射和列表)从一个apache nifi处理器传递到另一个?