2011-09-27 13 views
6

Ho una stringa in questa forma: =?utf-8?B?zr...Decodifica soggetto e-mail UTF-8?

e voglio ottenere il nome del file nella corretta codifica UTF-8. C'è un metodo di libreria da qualche parte in Maven Central che farà questa decodifica per me, o avrò bisogno di testare il pattern e decodificare base64 manualmente?

risposta

13

Nella terminologia MIME, quei blocchi codificati sono chiamati parole codificate. Controlla javax.mail.internet.MimeUtility.decodeText in JavaMail. Il metodo decodeText decodificherà tutte le parole codificate in una stringa.

Si può afferrare da Maven con

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

io aggiungere che ho avuto questo problema con un nome (simile alla risposta di mathi qui sotto) sulla parte MIME "Content-Disposition attachment; filename =" il nome del file ha "=? utf-8? B?" prefisso che è questa speciale codifica-parole. – Drizzt321

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

D'altra parte, se si utilizza JavaMail per la decodifica le e-mail, non c'è bisogno di preoccuparsi o analisi o nel corpo MIME (allegati) analisi a tutti.

BTW non ha bisogno di essere Base64 (comune con i client Apple), può anche essere Quoted-Printable (comune con il client MS Outlook).

Thunderbird utilizza qualsiasi formato sia più corto (Base64 per giapponese, QP per la maggior parte delle lingue europee).

Se davvero si vuole implementare da soli, uno sguardo ai RFC2047 e RFC2184 (si deve, ci sono alcune sottigliezze come la codifica diviso in due diversi set di caratteri o la fusione parole codificate adiacenti solo separati da uno spazio bianco pieghevole)

4

MimeUtility.decodeText sta lavorando per me,

ad esempio,

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