Javamail ISO-8859-1格式化

我使用Javamail Api为我的Android手机制作了一个电子邮件客户端。 如果我尝试使用以下方法获取发件人的邮件地址和收件人邮件地址:

Address[] froma = m.getFrom(); String from = InternetAddress.toString(froma); Address[] toa = m.getRecipients(Message.RecipientType.TO); String to = InternetAddress.toString(toa); 

我得到一个像这样的字符串:

“Georg =?ISO-8859-1?Q?SP = E4the?=它必须是GeorgSpäthe或Georg Spaethe。

我认为问题是这是德国邮件与另一种编码。 任何人都可以帮我解决这个问题吗?

MIME标头按RFC 2047编码,因此您需要先解码它们。

 String decoded = MimeUtility.decodeText("Georg =?ISO-8859-1?Q?SP=E4the?="); 

JDK导入:

 import javax.mail.internet.MimeUtility; 

对于Android:

 import com.android.email.mail.internet; 

另见MimeUtility的Javadoc

每个Address对象都是InternetAddress,将其强制转换为该对象,并根据您的需要使用getAddress或getPersonal方法。

对于它的价值:你可以转换为InternetAddress并使用toUnicodeString ,如果您的输入地址是"Georg =?ISO-8859-1?Q?SP=E4the?=" ,它将以"Georg Späthe" 的forms返回已解码的邮件"Georg =?ISO-8859-1?Q?SP=E4the?=" 。 另外,正如比尔·香农所解释的那样,你可以调用getPersonalgetAddress来获取解码后的值,因此不需要自己MimeUtility