如何处理电子邮件主题中的x-mac-ce编码

时间:2017-10-17 09:49:07

标签: java encoding javamail

我使用JavaMail来处理电子邮件。主题编码在以下字符集中:

Subject: =?x-mac-ce?Q?Wdro=BFenia_znaku_CE?=

如何使用JavaMail对此进行解码。

2 个答案:

答案 0 :(得分:1)

Windows seems to use x-mac-ce作为Windows-1250代码页的别名(与CP1250 JDK字符集匹配)。

JavaMail 在内部维护一个“MIME to Java”charset别名的映射, MimeUtility.javaCharset方法,处理类似的情况。

不幸的是x-mac-ce没有mapping(至少从JavaMail 1.6.0开始),并且(AFAIK)没有提供扩展API,无法添加它。

因此,您现在可以做的最好的事情是解码应用程序代码中的主题行,如下所示:

MimeUtility.decodeText(
    m.getSubject().replace("x-mac-ce","CP1250")
)

<强>测试

m.setSubject("=?x-mac-ce?Q?Wdro=BFenia_znaku_CE?=");
System.out.printf(
   MimeUtility.decodeText(
       m.getSubject().replace("x-mac-ce","CP1250")
   )
);

>>Wdrożenia znaku CE

注意

我首先错误地将编码识别为Macintosh Central European encodingx-MacCentralEurope Java Charset),它与CP1250不完全匹配,并且似乎是它的转置版本(即0xBF匹配0xFB等)

答案 1 :(得分:0)

显然x-mac-ce是一个非标准的字符集。 JavaMail依赖于JDK来处理charset编码到Unicode字符串的转换。如果,如上所述,x-mac-ce与CP1250字符集等效,则JavaMail FAQ解释how to use the JDK's facilities to map unknown charsets to known charsets