Java 文本文件编码为UTF_8?
我正在写一个Java项目,发送带有附件的电子邮件。Java 文本文件编码为UTF_8?,java,text,encoding,character-encoding,jakarta-mail,Java,Text,Encoding,Character Encoding,Jakarta Mail,我正在写一个Java项目,发送带有附件的电子邮件。 在我的测试用例中,我将一些日语单词“somehiraganas和Katakanas”添加到我附加的testfile.txt(我用UTF-8编码保存了它) 但当我给自己发送测试电子邮件时,在打开附加的testfile.txt后,每个日语字符都变成了“?” 所以我只是想知道为什么会这样 多谢各位 艾伦 更具体地说,这是我的代码。 我正在使用mail.jar发送电子邮件 以下是我获取文件的方式: /** * Add an attachmen
在我的测试用例中,我将一些日语单词“somehiraganas和Katakanas”添加到我附加的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");
// ...
但更重要的是,使用其中明确指定适当的字符集:
Reader reader = new InputStreamReader(new FileInputStream("/testfile.txt"), "UTF-8");
// ...
此外,在电子邮件附件的内容类型
标题中,您必须设置字符集属性,并且必须使用UTF-8写出附件。由于不清楚您使用的是什么邮件API,因此无法提供更多详细信息。或者,您也可以坚持使用InputStream
/OutputStream
,因为这样可以将内容流式传输为纯字节,因此不会影响字节所代表的字符集
更新:您使用的是Javamail,没有使用charset属性显式指定内容类型。现在,您取决于邮件客户端是否将内容视为UTF-8。按如下方式进行修复:
MimeBodyPart attachmentPart = new MimeBodyPart();
attachmentPart.attachFile(attachment);
attachmentPart.setHeader("Content-Type", "text/plain;charset=utf-8");
multipart.addBodyPart(attachmentPart);
您需要确保使用正确的字符集读取和写入文件 也就是说,如果不是这样,将使用平台的默认字符集:
Reader reader = new FileReader("/testfile.txt");
// ...
但更重要的是,使用其中明确指定适当的字符集:
Reader reader = new InputStreamReader(new FileInputStream("/testfile.txt"), "UTF-8");
// ...
此外,在电子邮件附件的内容类型
标题中,您必须设置字符集属性,并且必须使用UTF-8写出附件。由于不清楚您使用的是什么邮件API,因此无法提供更多详细信息。或者,您也可以坚持使用InputStream
/OutputStream
,因为这样可以将内容流式传输为纯字节,因此不会影响字节所代表的字符集
更新:您使用的是Javamail,没有使用charset属性显式指定内容类型。现在,您取决于邮件客户端是否将内容视为UTF-8。按如下方式进行修复:
MimeBodyPart attachmentPart = new MimeBodyPart();
attachmentPart.attachFile(attachment);
attachmentPart.setHeader("Content-Type", "text/plain;charset=utf-8");
multipart.addBodyPart(attachmentPart);
似乎解决了为mime正文内容(最后一条注释)正确设置字符集的问题。似乎解决了为mime正文内容(最后一条注释)正确设置字符集的问题。您能更具体一点吗?如何打开电子邮件/测试文件?你能发布一些代码片段吗?你能更具体一点吗?如何打开电子邮件/测试文件?你能发布一些代码片段吗?这个答案似乎效果更好:@mortensi:这个答案解决了(而不是解决了!)一个完全不同的问题。我试图发送一个包含一些斯堪的纳维亚字符的HTML文件(作为附件)。我为此挣扎了一段时间,上面的链接为我解决了这个问题。这个答案似乎更有效:@mortensi:这个答案解决了(而不是解决!)一个完全不同的问题。我试图发送一个HTML文件(作为附件),其中包含一些斯堪的纳维亚字符。我为此挣扎了一段时间,上面的链接为我解决了这个问题。