2010-01-22 36 views
0

我正在创建电子邮件客户端,当我收到来自黑莓服务器的电子邮件时,它将文件名称发送为“=?utf-8?B?anBlZ2F0dGFjaG1lbnQuSlBFRw ==?=”,但原始文件名为“jpegattachment.JPEG”,有时候我从其他邮件服务器收到时获取纯文本。 所以这里我的问题是我可以得到一个字符串,可能或不可能被编码。如何解码java中运行时的字符串?

有什么办法,我可以得到字符串的编码和解码成纯文本。

输入字符串是“=?utf-8?B?anBlZ2F0dGFjaG1lbnQuSlBFRw ==?=”或“jpegattachment.JPEG”输出应该是“jpegattachment.JPEG”。

任何想法?

回答

1

这是MIME编码。尽管Base64是最受欢迎的,但它可能会使用其他编码,如Quoted-printable,二进制等。因此,您应该使用现有的库来解码。任何邮件程序都会内置解码器。

您可以使用从Java邮件的decodeWord()

http://java.sun.com/products/javamail/javadocs/javax/mail/internet/MimeUtility.html#decodeWord(java.lang.String)

尝试deocdeText()如果你想独自离开纯文本。

+0

非常感谢.... – sumitarora 2010-01-23 21:13:38

1

是的,这个:anBlZ2F0dGFjaG1lbnQuSlBFRw==是base64编码的jpegattachment.JPEG。所以只需用base64解码即可。

回答如何,在这里: Decode Base64 data in Java

+0

所以,我必须手动修剪“=?utf-8?B?”。 我不能修剪,因为在某些情况下,它可能只是一个纯文本。 如何在运行时接收纯文本或编码的文件? – sumitarora 2010-01-22 09:55:16

+0

那么......如果你尝试解码不是base64的字符串,它会抛出一个错误,所以你可以尝试检查字符串。如果它在解码过程中没有抛出任何异常,它就是base64,如果它抛出异常,它就是纯文本。但我想所有那代表Base64编码参数的“B”...... \t (所以如果有“B:在字符串中,你可以知道在接下来的两个问号之间是什么是Base64编码的。) – Cipi 2010-01-22 10:00:05