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

How to handle x-mac-ce encoding in email subject

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

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

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

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

JavaMail 在内部维护一个 "MIME to Java" 字符集别名的映射,通过 MimeUtility.javaCharset 方法,来处理这样的情况。

不幸的是 x-mac-ce 没有 mapping(至少从 JavaMail 1.6.0 开始),并且(据我所知)没有提供扩展名 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 字符集),它与 CP1250 不完全匹配,似乎是它的转置版本(即 0xBF 匹配 0xFB e.t.c.).

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