Кодировка текстового файла в UTF_8? - PullRequest
0 голосов
/ 27 октября 2011

Я пишу Java-проект, отправляющий письмо с вложением.

В моем тестовом примере я добавляю несколько японских слов "некоторые хираганы и катаканы" в свой прикрепленный файл testfile.txt (который я сохранил в кодировке UTF-8.)

Но когда я отправляю свойпроверить электронную почту для себя, после того, как я открыл прилагаемый testfile.txt, каждый японский символ становится «????».

Так что мне просто интересно, почему это происходит ...?

Спасибо

Аллан

PS, чтобы быть более конкретным, вот мой код.Я использую 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);
    }

Ответы [ 2 ]

6 голосов
/ 27 октября 2011

Вы должны убедиться, что вы читаете и пишете файл, используя правильную кодировку.

т.е. таким образом, это не так, что будет использовать кодировку платформы по умолчанию:

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);
0 голосов
/ 27 октября 2011

Эта тема , кажется, предназначена для правильной установки символов для содержимого тела MIME (последний комментарий).

...