1 解决方案
String orgOutName = "这是一张图.jpg";
String outName = URLEncoder.encode(orgOutName, "UTF-8");
if(request.getHeader("user-agent")!=null){
UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("user-agent"));
Browser browser = userAgent.getBrowser();
if(browser.getName()!=null && browser.getName().equals("Safari")){
outName = new String(orgOutName.getBytes("UTF-8"),"ISO-8859-1");
}
}
response.setHeader("Content-Disposition","attachment;filename="+outName);其中用到工具
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.20</version>
</dependency>2 分析过程
1)获取各个浏览器请求时的user-agent
Chrome:user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36
IE:user-agent=Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Edge:user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363
FireFox:user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0)
Gecko/20100101 Firefox/76.0
Safri:user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5)
AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.1 Safari/605.1.152)各个方法在各种浏览器中的乱码情况
String outName = new String(orgOutName.getBytes("GBK"),"ISO-8859-1");
chrome,ie(表示使用此种方法不会乱码的浏览器)
String outName = new String(orgOutName.getBytes("UTF-8"),"ISO-8859-1")
chrome,firefox,safri
String outName = URLEncoder.encode(orgOutName, "UTF-8");
chrome,ie,firefox,edge