Javamail ISO-8859-1格式化

时间:2013-05-10 11:27:21

标签: java android email 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。

我认为问题在于这是带有其他编码的德国邮件。有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:7)

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;

另见Javadoc of MimeUtility

答案 1 :(得分:0)

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

答案 2 :(得分:0)

对于它的价值:如果您的输入地址为InternetAddress,您可以转换为toUnicodeString并使用"Georg Späthe" <georg.spaethe@example.com>"Georg =?ISO-8859-1?Q?SP=E4the?=" <georg.spaethe@example.com>的形式返回已解码的邮件。另外,正如比尔·香农所解释的那样,你可以拨打getPersonalgetAddress来获取解码后的值,这样就不需要自己摆弄MimeUtility