2015-07-03 2 views
0

У меня есть метод:кодировки имен файлов с base64 в MSIE

private String encodeFileAttachment(HttpServletRequest request, String filename) throws IOException { 
String userAgent = request.getHeader("User-Agent"); 
if (userAgent.contains("Mozilla") && !userAgent.contains("MSIE")) { 
    return "=?UTF-8?B?" + new String(Base64.encodeBase64(filename.getBytes("UTF-8")), "UTF-8") + "?="; 
} else { 
    return filename = URLEncoder.encode(filename, "UTF-8"); 
} 
} 

и имя файла, как:

SSS ZZZ ddd.png

светлячок вернуть что-то вроде этого: image1 но MSIE возвращение image 2

Так что, вероятно, изменение метода кодирования "" на '+' Эта проблема возникает только в Internet Explorer. Может ли кто-нибудь сказать мне, почему?

+0

Знаете ли вы, что ваш URLEncoder.encode() не вызывается для Fire Fox? Или я чего-то не хватает? –

+0

Я это понимаю. Но это кодирование хорошо может сделать трюк со специальными символами. Проблема заключалась в пробелах (""). Не могли бы вы помочь мне с этой проблемой? – Adamo

+0

Упомянем, что решение проверяет другие браузеры, и проблема возникает только в MSIE. – Adamo

ответ

0

Это ведет себя так, как ожидалось. URLEncoder реализует спецификации HTML для кодирования URL-адресов в форматах HTML.

Из Javadocs:

This class contains static methods for converting a String to the application/x-www-form-urlencoded MIME format. 

и из HTML Спецификация:

1. Control names and values are escaped. Space characters are replaced by `+' 

Решение:

URLEncoder.encode(filename, "utf-8").replaceAll("\\+", " "); 
Смежные вопросы