解码UTF-8电子邮件主题?

12

我有一个这样的字符串:=?utf-8?B?zr...

我想以适当的UTF-8编码获取文件名。是否有一个在 Maven Central 中的库方法可以为我解码,还是我需要测试该模式并手动解码 base64?

3个回答

17
在MIME术语中,这些编码块被称为编码字。在JavaMail中查看javax.mail.internet.MimeUtility.decodeText。该decodeText方法将解码字符串中的所有编码字。
您可以使用maven获取它。
 <groupId>javax.mail</groupId>
 <artifactId>mail</artifactId>
 <version>1.4.4</version>

我要补充一下,我也曾在MIME部分“Content-Disposition attachment;filename=”中遇到了一个类似于mathi在下面回答的名称问题,文件名具有“=?utf-8?B?”前缀,这是这种特殊编码词。 - Drizzt321

6
MimeUtility.decodeText 对我有用,例如:
MimeUtility.decodeText("=?UTF-8?B?4K6q4K+N4K6q4K+K4K604K6/4K614K+BIQ==?=");

4
javax.mail.internet.MimeUtility.decodeWord()

另一方面,如果您使用JavaMail解码电子邮件,则完全不必关心主题解析或MIME正文(附件)解析。

顺便说一下,它不需要Base64(常见于苹果客户端),也可以是Quoted-Printable(常见于MS Outlook客户端)。

Thunderbird使用较短的格式(日语为Base64,大多数欧洲语言为QP)。

如果您真的想自己实现它,请查看RFC2047RFC2184(您必须这样做,因为有一些微妙之处,例如将编码分成两个不同的字符集或仅通过折叠空格分隔的相邻编码单词合并)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接