zoukankan      html  css  js  c++  java
  • 不同浏览器上中文文件名的下载乱码问题

    浏览器能正确识别的编码格式,只要按照这样的编码来设置对应的Content-Disposition,那么应该就不会出现中文文件名的乱码问题了。 
    首先,Content-Disposition值可以有以下几种编码格式 
    1. 直接urlencode: 

        Content-Disposition: attachment; filename="struts2.0%E4%B8%AD%E6%96%87%E6%95%99%E7%A8%8B.chm" 

    2. Base64编码: 

        Content-Disposition: attachment; filename="=?UTF8?B?c3RydXRzMi4w5Lit5paH5pWZ56iLLmNobQ==?=" 

    3. RFC2231规定的标准: 

        Content-Disposition: attachment; filename*=UTF-8''%E5%9B%9E%E6%89%A7.msg 

    4. 直接ISO编码的文件名: 

        Content-Disposition: attachment;filename="测试.txt" 

    然后,各浏览器支持的对应编码格式为: 

    1.  IE浏览器,采用URLEncoder编码 
    2.  Opera浏览器,采用filename*方式 
    3.  Safari浏览器,采用ISO编码的中文输出 
    4.  Chrome浏览器,采用Base64编码或ISO编码的中文输出 
    5.  FireFox浏览器,采用Base64或filename*或ISO编码的中文输出 


    new_filename = URLEncoder.encode(filename, "UTF8");  
    // 如果没有UA,则默认使用IE的方式进行编码,因为毕竟IE还是占多数的  
    rtn = "filename="" + new_filename + """;  
    if (userAgent != null)  
    {  
         userAgent = userAgent.toLowerCase();  
          // IE浏览器,只能采用URLEncoder编码  
         if (userAgent.indexOf("msie") != -1)  
        {  
            rtn = "filename="" + new_filename + """;  
        }  
         // Opera浏览器只能采用filename*  
         else if (userAgent.indexOf("opera") != -1)  
         {  
            rtn = "filename*=UTF-8''" + new_filename;  
        }  
        // Safari浏览器,只能采用ISO编码的中文输出  
          else if (userAgent.indexOf("safari") != -1 )  
          {  
              rtn = "filename="" + new String(filename.getBytes("UTF-8"),"ISO8859-1") + """;  
          }  
          // Chrome浏览器,只能采用MimeUtility编码或ISO编码的中文输出  
          else if (userAgent.indexOf("applewebkit") != -1 )  
           {  
             new_filename = MimeUtility.encodeText(filename, "UTF8", "B");  
              rtn = "filename="" + new_filename + """;  
           }  
          // FireFox浏览器,可以使用MimeUtility或filename*或ISO编码的中文输出  
           else if (userAgent.indexOf("mozilla") != -1)  
           {  
              rtn = "filename*=UTF-8''" + new_filename;  
          }  
       }  

    目前,我测试的情况,在几个浏览器上都能正常输入中文文件名 
    但,也许浏览器不同版本,可能还会有乱码的情况.....
  • 相关阅读:
    反射
    left join 多个表关联时,将表值置换
    distinct 与 group by 去重
    常见错误
    字符串的处理
    排版样式
    VS低版本打开高版本解决方案(如08打开10、12、13版本vs编译的项目)
    Dw CS 破解
    VS2013如何避开安装时IE10的限制
    UVa540 Team Queue
  • 原文地址:https://www.cnblogs.com/zhangzhen894095789/p/6479033.html
Copyright © 2011-2022 走看看