使用老的user-agent判断"MSIE"的方法,l判断IE11浏览器是无法识别,导致下载excel文件乱码
原先的代码:
// 清空response
response.reset();
String userAgent = request.getHeader("User-Agent");
String file_name = ""+ group.getName() + "("+ group.getItemId() +")";
if (StringUtils.contains(userAgent, "MSIE") ) {//IE浏览器
file_name = URLEncoder.encode(file_name,"UTF8");
} else if (StringUtils.contains(userAgent, "Mozilla")) {//google,FireFox
file_name = new String(file_name.getBytes(), "ISO8859-1");
} else {
file_name = URLEncoder.encode(file_name,"UTF8");//其他浏览器
}
各个浏览器的use-agent:
IE11:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
IE10:Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
Firefox:Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:44.0) Gecko/20100101 Firefox/44.0
Chrome:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
原因:
之前多数使用MSIE来判断是否IE浏览器的代码都无法工作,可以改用Trident字符串来判断。Trident标识是在IE9中引入的。
// 清空response
response.reset();
String userAgent = request.getHeader("User-Agent");
String file_name = ""+ group.getName() + "("+ group.getItemId() +")";
/**
* 在IE9以后,微软使用了Trident来作为IE浏览器的标志,为了兼容老的版本,此处还要兼容IE6、7、8的版本
*/
if (StringUtils.contains(userAgent, "MSIE") || StringUtils.contains(userAgent, "Trident")) {//IE浏览器
file_name = URLEncoder.encode(file_name,"UTF8");
} else if (StringUtils.contains(userAgent, "Mozilla")) {//google,FireFox
file_name = new String(file_name.getBytes(), "ISO8859-1");
} else {
file_name = URLEncoder.encode(file_name,"UTF8");//其他浏览器
}
这样就解决了