首页 > 解决方案 > JavaMail 未正确解码 ISO-8859-1 邮件

问题描述

我正在从Content-Transfer-Encoding: 8bit使用 JavaMail 编码的 IMAP 服务器接收消息。据我所知,服务器正确输出消息并且可以解码,因为两者telnet和 Thunderbird 都显示包含德语短语“Mit freundlichen Grüßen”(“真诚地属于你的”)的消息。

但是,当我检索MimeMessageusing 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'sgetRawInputStream ()函数获取邮件内容,情况会变得“更糟”;然后它返回Mit freundlichen GrüÃÂen0x83两个之后是不可见字节,之后Ã是不可见字节)。0x9FÂ

但是,据我所知,这两个函数都应该返回正确的消息。

我应该做

builder.append (line.getBytes ("ISO-8859-1")).append ("\n");

或者

BufferedReader reader = new BufferedReader (
  new InputStreamReader (msg.getInputStream (), Charset.forName ("ISO-8859-1"))
);

(但是当我尝试时这也不起作用)还是我(和/或服务器)在做其他公然错误的事情?

标签: javajakarta-mailiso-8859-1

解决方案


读完一行后,再尝试转换为时已晚。使用new InputStreamReader (msg.getInputStream (), "ISO-8859-1").


推荐阅读