2015-07-03 48 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

Firefox的返回是這樣的: image1 但MSIE回報image 2

所以很可能編碼方法改變「」到「+」0​​僅在Internet Explorer中出現此問題。有人能告訴我爲什麼嗎?

+0

您是否知道您的URLEncoder.encode()不要求火狐?或者我在這裏錯過了什麼? –

+0

我意識到這一點。但是,編碼好可以用特殊字符來完成。問題在於空格(「」)。你能幫我解決這個問題嗎? – Adamo

+0

我會提到該解決方案正在檢查其他瀏覽器,並且問題僅在MSIE中出現。 – Adamo

回答

0

此行爲與預期相同。 URLEncoder實現HTML規範如何以HTML形式編碼URL。

從的javadoc:

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("\\+", " ");