我正在使用 JavaMail 1.4.1(我已升级到 1.4.5 版本但遇到同样的问题)从电子邮件帐户中读取消息,但我遇到了内容编码问题:
POP3Message pop3message;
...
Object contentObject = pop3message.getContent();
...
String contentType = pop3message.getContentType();
String content = contentObject.toString();
有些消息可以正确读取,但其他消息由于编码不合适而具有奇怪的字符。我已经意识到它不适用于特定的内容类型。
如果 contentType 是以下任何一种,则效果很好:
文本/纯文本;字符集=ISO-8859-1
文本/纯文本;
字符集="iso-8859-1"文本/纯文本;
字符集="ISO-8859-1";
格式="流动"文本/纯文本;字符集=windows-1252
但如果它不是:
- 文本/纯文本;
字符集="utf-8"
对于这个 contentType (UTF-8 one),如果我尝试获取编码 (pop3message.getEncoding()) 我得到
引用可打印
例如,对于后一种编码,我在调试器中得到 String 值(与持久化对象后在数据库中看到的方式相同):
Ubicación(而不是 Ubicación)
但是,如果我在浏览器中使用电子邮件客户端打开电子邮件,则可以毫无问题地阅读它,并且这是一条普通的消息(没有附件,只有文本),因此该消息似乎没问题。
关于如何解决这个问题的任何想法?
谢谢。
更新 这是我添加的一段代码,用于尝试 jlordo 提供的函数 getUTF8Content()
POP3Message pop3message = (POP3Message) message;
String uid = pop3folder.getUID(message);
//START JUST FOR TESTING PURPOSES
if(uid.trim().equals("1401")){
Object utfContent = pop3message.getContent();
System.out.println(utfContent.getClass().getName()); // it is of type String
//System.out.println(utfContent); // if not commmented it prints the content of one of the emails I'm having problems with.
System.out.println(pop3message.getEncoding()); //prints: quoted-printable
System.out.println(pop3message.getContentType()); //prints: text/plain; charset="utf-8"
String utfContentString = getUTF8Content(utfContent); // throws java.lang.ClassCastException: java.lang.String cannot be cast to javax.mail.util.SharedByteArrayInputStream
System.out.println(utfContentString);
}
//END TEST CODE