Как декодировать строку во время выполнения в java?

Я создаю почтовый клиент, когда я получаю электронные письма с сервера Blackberry, он отправляет имя файла как "=?utf-8?B?anBlZ2F0dGFjaG1lbnQuSlBFRw==?=", но исходное имя файла было "jpegattachment.JPEG", и иногда я получаю обычный текст, когда я получаю от других почтовых серверов. Итак, моя проблема в том, что я могу получить строку, которая может быть закодирована или не закодирована.

Есть ли способ получить кодировку строки и декодировать ее в обычный текст.

Либо входная строка "=?utf-8?B?anBlZ2F0dGFjaG1lbnQuSlBFRw==?=", либо вывод "jpegattachment.JPEG" должен быть "jpegattachment.JPEG".

Есть идеи??


person sumitarora    schedule 22.01.2010    source источник


Ответы (2)


Это кодировка MIME. Несмотря на то, что Base64 наиболее популярен, он может использовать другие кодировки, такие как Quoted-printable, двоичные и т. д. Поэтому вам следует использовать существующую библиотеку для декодирования этого. Любая почтовая программа будет иметь встроенный декодер.

Вы можете использовать decodeWord() из Java Mail,

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

Попробуйте deocdeText(), если хотите оставить обычный текст в покое.

person ZZ Coder    schedule 22.01.2010

Да, это: anBlZ2F0dGFjaG1lbnQuSlBFRw== в кодировке base64 jpegattachment.JPEG. Так что просто расшифруйте его с помощью base64.

Ответил, как здесь: Декодировать данные Base64 в Java

person Cipi    schedule 22.01.2010
comment
Итак, мне нужно вручную обрезать =?utf-8?B?. Я не могу обрезать, так как в некоторых случаях это может быть просто текст. Как я могу сделать это во время выполнения, где я могу получать обычный текст или закодированный? - person sumitarora; 22.01.2010
comment
Ну... если вы попытаетесь декодировать строку, которая не является base64, она выдаст ошибку, поэтому вы можете попробовать проверить строку. И если он не выдает никаких исключений во время декодирования, это был base64, а если он выдавал исключение, это был обычный текст. Но я предполагаю, что B во всем, что означает параметры в кодировке Base64... (поэтому, если в строке есть B:, вы можете знать, что то, что находится между следующими двумя вопросительными знаками, закодировано в Base64.) - person Cipi; 22.01.2010