2011-09-27 148 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==?=");