Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 文本文件编码为UTF_8?_Java_Text_Encoding_Character Encoding_Jakarta Mail - Fatal编程技术网

Java 文本文件编码为UTF_8?

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

我正在写一个Java项目,发送带有附件的电子邮件。

在我的测试用例中,我将一些日语单词“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文件(作为附件),其中包含一些斯堪的纳维亚字符。我为此挣扎了一段时间,上面的链接为我解决了这个问题。