不一樣瀏覽器上中文文件名的下載問題

瀏覽器能正確識別的編碼格式,只要按照這樣的編碼來設置對應的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;  
      }  
   }  

目前,我測試的狀況,在幾個瀏覽器上都能正常輸入中文文件名 
但,也許瀏覽器不一樣版本,可能還會有亂碼的狀況.....web

相關文章
相關標籤/搜索