2011-09-27 111 views
6

我有一个字符串在这种形式:=?utf-8?B?zr...解码UTF-8电子邮件主题?

而我想以适当的UTF-8编码获取文件的名称。 maven central有没有一个库方法可以为我解码,或者我需要手动测试模式并解码base64?

回答

13

在MIME术语中,那些编码的块称为编码字。在JavaMail中查看javax.mail.internet.MimeUtility.decodeTextdecodeText方法将解码字符串中的所有编码字。

您可以从行家与

<groupId>javax.mail</groupId> 
<artifactId>mail</artifactId> 
<version>1.4.4</version> 
+0

我补充一点,我有这个问题有一个名字(类似于下面的mathi的答案)在MIME部分“Content-Disposition attachment; filename =”文件名有“=?utf-8?B?”前缀是这个特殊的编码词。 – Drizzt321

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

在另一方面,如果你使用JavaMail为您的电子邮件进行解码,你不必在意这两门课解析或MIME体(附件)解析的。

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

雷鸟使用的格式较短(Base64代表日语,QP代表大多数欧洲语言)。如果你真的想自己实现它,看一下RFC2047RFC2184(你必须,有两个不同的细节,比如两个不同的字符集中的分割编码或合并相邻的编码字,只能用折叠空白区分开)

4

MimeUtility.decodeText为我工作,

如抓住它,

MimeUtility.decodeText("=?UTF-8?B?4K6q4K+N4K6q4K+K4K604K6/4K614K+BIQ==?=");