Вы должны убедиться, что вы читаете и пишете файл, используя правильную кодировку.
т.е. таким образом, это не так, что будет использовать кодировку платформы по умолчанию:
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);