Я получаю сообщение от сервера IMAP, который закодирован с использованием Content-Transfer-Encoding: 8bit
с использованием JavaMail.Насколько я могу судить, сервер правильно выводит сообщение, и оно может быть декодировано, поскольку и telnet
, и Thunderbird отображают сообщение, которое содержит немецкую фразу "Mit freundlichen Grüßen" ("Искренне ваш") в том виде, в каком она есть.
Однако, когда я получаю MimeMessage
с помощью JavaMail и получаю его InputStream
с помощью следующего кода, он возвращает Mit freundlichen GrüÃen
(с одним невидимым 0x9F
байтом после второго Ã
):
MimeMessage msg = imapFolder.getMessages() [0]; // Just for demo purposes
StringBuilder builder = new StringBuilder ();
String line;
try (
BufferedReader reader = new BufferedReader (
new InputStreamReader (msg.getInputStream ())
)
) {
while ((line = reader.readLine ()) != null) {
builder.append (line).append ("\n");
}
} catch (IOException e) {
// ...
}
Ситуация становится немного «хуже», если я пытаюсь получить содержимое письма с помощью функции MimeMessage
getRawInputStream ()
;затем он возвращает Mit freundlichen GrüÃÂen
(с невидимыми 0x83
байтами после двух Ã
и невидимым 0x9F
байтами после Â
).
Однако, насколько я могу судить, обе функции должныверните правильное сообщение.
Должен ли я делать
builder.append (line.getBytes ("ISO-8859-1")).append ("\n");
или
BufferedReader reader = new BufferedReader (
new InputStreamReader (msg.getInputStream (), Charset.forName ("ISO-8859-1"))
);
(но это не сработало, когда я пытался) или я (и / или сервер) делать что-то еще явно не так?