0

メールの添付ファイルをutf8で保存する必要があります。このコードを試してみましたが、まだいくつかの文字が欠けています:

public static void main(String args[]) throws Exception {
    File emlFile = new File("example.eml");

    InputStream source;

    source = new FileInputStream(emlFile);

    MimeMessage message = new MimeMessage(null, source);

    Multipart multipart = (Multipart) message.getContent();

    for (int x = 0; x < multipart.getCount(); x++) {

        BodyPart bodyPart = multipart.getBodyPart(x);
        String disposition = bodyPart.getDisposition();

        if (disposition != null && (disposition.equals(BodyPart.ATTACHMENT))) {
            System.out.println("Mail have some attachment : ");

            DataHandler handler = bodyPart.getDataHandler();
            System.out.println("file name : " + handler.getName());


            //start reading inpustream from attachment
            InputStream is = bodyPart.getInputStream();
            File f = new File(bodyPart.getFileName());
            OutputStreamWriter sout = new OutputStreamWriter(new FileOutputStream(f), "UTF8");
            BufferedWriter buff_out = new BufferedWriter(sout);
            int bytesRead;
            while ((bytesRead = is.read()) != -1) {
                buff_out.write(bytesRead);
            }
            buff_out.close();

        }
    }
}
4

1 に答える 1

1

エンコーディングを無視して添付ファイルからバイトを読み取り、ファイルに文字を出力しています。ほとんどの場合、どちらかを実行するか、2つを混合しないことをお勧めします。

添付ファイルに生のバイトが含まれている場合、出力をUTFエンコードしても意味がなく、生のストリームを操作できます。

テキストが含まれている場合は、添付ファイルを生のバイトではなくテキストとして読み取り、読み取りと書き込みの両方にエンコードを使用することもできます。

後者の場合、次のようなものです。

InputStream is = bodyPart.getInputStream();
InputStreamReader sin = new InputStreamReader(is, 
                                              "UTF8"); // <-- attachment charset 

File f = new File(bodyPart.getFileName());
OutputStreamWriter sout = new OutputStreamWriter(new FileOutputStream(f), "UTF8");
BufferedReader buff_in = new BufferedReader(sin);
BufferedWriter buff_out = new BufferedWriter(sout);

int charRead;
while ((charRead = buff_in.read()) != -1) {
    buff_out.write(charRead);
}

buff_in.close();
buff_out.close();
于 2013-03-18T14:41:04.493 に答える