2011-09-27 22 views
6

Tengo una cadena en esta forma: =?utf-8?B?zr...Descifrando el asunto del correo electrónico UTF-8?

Y quiero obtener el nombre del archivo con la codificación UTF-8 correcta. ¿Existe algún método de biblioteca en Maven Central que haga esta decodificación para mí, o tendré que probar el patrón y decodificar base64 manualmente?

Respuesta

13

En la terminología MIME, los fragmentos codificados se denominan palabras codificadas. Consulte javax.mail.internet.MimeUtility.decodeText en JavaMail. El método decodeText decodificará todas las palabras codificadas en una cadena.

lo pueda levantar de Maven con

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

Voy a añadir que he tenido este problema con un nombre (similar a la respuesta de mathi a continuación) en la parte MIME "Archivo adjunto de contenido-disposición; nombrearchivo =" el nombre de archivo tiene "=? utf-8? B?" prefijo que es esta especial codificada-palabras. – Drizzt321

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

Por otro lado, si se utiliza JavaMail para la decodificación de mensajes de correo electrónico, usted no tiene que preocuparse por cualquiera de los dos análisis asunto o cuerpo MIME (adjuntos) análisis en absoluto.

BTW no necesita ser Base64 (común con los clientes de Apple), también puede ser Quoted-Printable (común con el cliente de MS Outlook).

Thunderbird utiliza el formato que sea más corto (Base64 para japonés, QP para la mayoría de los idiomas europeos).

Si realmente desea implementarlo usted mismo, eche un vistazo a RFC2047 y RFC2184 (debe hacerlo, existen algunas sutilezas como la codificación dividida en dos juegos de caracteres diferentes o la combinación de palabras codificadas adyacentes solo separadas por espacio en blanco plegable)

4

MimeUtility.decodeText está trabajando para mí,

por ejemplo,

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