java - JavaMail 未正确解码 ISO-8859-1 邮件
问题描述
我正在从Content-Transfer-Encoding: 8bit
使用 JavaMail 编码的 IMAP 服务器接收消息。据我所知,服务器正确输出消息并且可以解码,因为两者telnet
和 Thunderbird 都显示包含德语短语“Mit freundlichen Grüßen”(“真诚地属于你的”)的消息。
但是,当我检索MimeMessage
using 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üÃÂ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"))
);
(但是当我尝试时这也不起作用)还是我(和/或服务器)在做其他公然错误的事情?
解决方案
读完一行后,再尝试转换为时已晚。使用new InputStreamReader (msg.getInputStream (), "ISO-8859-1")
.
推荐阅读
- java - java输入输出语法(简单)
- reactjs - 最新版本的 joi-browser 和它的名称是什么?
- android - 在调用侦听器时将视图附加到 RecyclerView
- mongodb - 带有外部字段匹配的mongodb查找
- javascript - 将 JSON 对象中的数据从一类传递到另一类
- python - 为什么我们在keras模型中使用smooth变量来计算dice_coef或IoU?
- oracle - 在客户端选择时,Oracle apex-更新服务器上的项目值
- reactjs - 用“功能组件”实现事件监听和生命周期
- excel - 根据数字选择 Excel 工作表
- swift - 对 Swift 中的向下转换值感到困惑