javaweb文件下载中文名乱码问题
2015-10-14 15:53
471 查看
IE:通过URLEncoder对filename进行UTF8编码
其他浏览器(firefox、chrome、safari、opera),通过字节转换成ISO-8859-1
通过分析userAgent属性来判断浏览器的类型及版本:
Windows操作系统浏览器系列:
IE浏览器系列:
特征表现:均以 “mozilla/” 开头,”msie x.0;” 中的x表示其版本;
判断方法:粗略判断可以只检索 “msie x.0;” 字符串即可,严格判断可检索 “mozilla/x.0 (compatibal; msie x.0; windows nt”,不过一般没有这个必要
Windows版Firefox:
特征表现:以”mozilla/x.0”开头,包含”windows nt”,”gecko/”和”firefox/” ;
判断方法:粗略判断可以只检索 “firefox/”和”windows nt” 字符串,严格判断可以检索”mozilla/” ,”windows nt”,”gecko/”和”firefox/” 四个字符串;
Windows版Chrome:
特征表现: 以”mozilla/x.0”开头,包含”windows nt”,”chrome/”,同时包含”applewebkit/”,”safari/”;
判断方法:粗略判断可以只检索 “windows nt”和”chrome/”字符串,严格判断可以同时检索 “mozilla/” ,”windows nt”,”applewebkit/”,”safari/”,”chrome/” 五个字符串;
Windows版Opera:
特征表现:以”opera/”开头,含有”windows nt”,”presto/” 字符串;
判断方法:粗略判断只检索 “windows nt”和”opera/”字符串,严格判断同时检索 “opera/”,”windows nt” 和 “presto/”;
Windows版Safari:
特征表现:以”mozilla/”开头,同时含有”windows nt”,”applewebkit/”,”safari/”;
判断方法:粗略判断可以检索含有 “windows nt”,”safari/” 同时不包含 “chrome/”,严格判断需要同时含有”mozilla/”,”windows nt”,”applewebkit/”,”safari/”但是不包含”chrome/”;
小结:Windows操作系统上的浏览器userAgent均包含”windows nt”字符串来表征windows操作系统。
其他浏览器(firefox、chrome、safari、opera),通过字节转换成ISO-8859-1
if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) { filename = URLEncoder.encode(filename, "UTF-8"); } else { filename = new String(filename.getBytes("UTF-8"), "ISO8859-1"); }
public class DataExportAction extends Action{ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){ DataForm formBean = (DataForm)form; DataService dataService = (DataService)getBean("DataService"); ...// 此处省略对 formBean 进行处理 response.reset(); fileName = "中文乱码问题"; ServletOutputStream out = response.getOutputStream(); String agent = request.getHeader("User-Agent"); if(agent != null && agent.toUpperCase().indexOf("MSIE") != -1){ response.setHeader("Content-Disposition","attachment; fileName=" +URLEncoder.encode(fileName,"utf-8") + ".xls") }else{ response.setHeader("Content-Disposition","attachment; fileName=" + new String(fileName.getBytes("utf-8"),"iso-8859-1") + ".xls"); } //定义输出类型 response.setContentType("APPLICATION/msexcel"); //... DataService.exportDataToExcel(formBean,out); out.close(); response.flushBuffer(); }
通过分析userAgent属性来判断浏览器的类型及版本:
Windows操作系统浏览器系列:
IE浏览器系列:
特征表现:均以 “mozilla/” 开头,”msie x.0;” 中的x表示其版本;
判断方法:粗略判断可以只检索 “msie x.0;” 字符串即可,严格判断可检索 “mozilla/x.0 (compatibal; msie x.0; windows nt”,不过一般没有这个必要
Windows版Firefox:
特征表现:以”mozilla/x.0”开头,包含”windows nt”,”gecko/”和”firefox/” ;
判断方法:粗略判断可以只检索 “firefox/”和”windows nt” 字符串,严格判断可以检索”mozilla/” ,”windows nt”,”gecko/”和”firefox/” 四个字符串;
Windows版Chrome:
特征表现: 以”mozilla/x.0”开头,包含”windows nt”,”chrome/”,同时包含”applewebkit/”,”safari/”;
判断方法:粗略判断可以只检索 “windows nt”和”chrome/”字符串,严格判断可以同时检索 “mozilla/” ,”windows nt”,”applewebkit/”,”safari/”,”chrome/” 五个字符串;
Windows版Opera:
特征表现:以”opera/”开头,含有”windows nt”,”presto/” 字符串;
判断方法:粗略判断只检索 “windows nt”和”opera/”字符串,严格判断同时检索 “opera/”,”windows nt” 和 “presto/”;
Windows版Safari:
特征表现:以”mozilla/”开头,同时含有”windows nt”,”applewebkit/”,”safari/”;
判断方法:粗略判断可以检索含有 “windows nt”,”safari/” 同时不包含 “chrome/”,严格判断需要同时含有”mozilla/”,”windows nt”,”applewebkit/”,”safari/”但是不包含”chrome/”;
小结:Windows操作系统上的浏览器userAgent均包含”windows nt”字符串来表征windows操作系统。
相关文章推荐
- Orace查询数据出现乱码的问题解决思路
- oracle em 按钮乱码解决办法及em网页变成英文
- C#读取中文文件出现乱码的解决方法
- mysql命令提示行连接乱码的解决
- Jquery乱码的一次解决过程 图解教程
- 解决realplayer11中文正式版网页右键乱码问题embed_cn.dll
- 计算机中的字符串编码、乱码、BOM等问题详解
- php+AJAX传送中文会导致乱码的问题的解决方法
- Discuz!nt 源文件变成乱码的解决方法
- jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
- JavaScript中出现乱码的处理心得
- Js,alert出现乱码问题的解决方法
- 深入Lumisoft.NET组件开发碰到乱码等问题的解决方法
- jquery中文乱码的多种解决方法
- Jquery网页出现的乱码问题的三种解决方法
- oracle安装出现乱码等相关问题
- GET方法URL中传递中文参数乱码的解决方法
- JSP中文乱码常见3个例子及其解决方法
- mysql重装后出现乱码设置为utf8可解决
- JQuery AJAX 中文乱码问题解决