<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      中文名文件下載瀏覽器兼容處理

      前言

      文件下載功能中的文件名處理,這又是個老生長談的問題了,網絡上也有各種解決方式,但可能由于各自項目語言以及編碼不同導致多數方案都不盡如人意,最近又遇到這個問題,姑且根據自己的環境和編碼總結一下

      后續觀點都是基于如下環境

      • 服務端語言:JAVA
      • 項目編碼:GBK
      • 應用服務器Resin 3.1

      分析

      Firefox會截斷空格問題

      在Firefox下,如果文件名中有空格,那么空格后面部分的文字會被瀏覽器截取掉,客戶端獲取不到完整的文件名

      解決方案:

      1. 將文件名使用雙引號包裹起來
      2. 使用 MimeUtility.encodeWord(filename)方法,將其編碼為“=?gb2312?B?xxxxxxxx?=”格式,其中的空格會被編碼掉,并且Firefox可以識別該格式將其還原為原始的文件名

      IE6下請求頭長度有限制,文件名長度只能在150字節左右

      經過測試,IE6下當要下載的文件名長度超過150字節后,超過部分會被瀏覽器截取掉(為了保證擴展名完整,瀏覽器會從前面截?。?,并且如果是中文還有可能亂碼(應該是由于編碼后再截取后不能再次還原為中文字符),這個是IE6自身的機制,因此我們只能考慮使用較短的文件名或者自己使用代碼合理將其截取

      關于亂碼

      這一塊我也不是理解的十分透徹,就我的理解簡單分析一下:

      首先,大家都知道中文是多字節字符,由于計算機的基本存儲單元是字節(byte),而一個byte顯然不能夠表示包括中文在內的所有字符,因此中文、日文等等語言在存儲時都會被編碼為多個字節存儲到計算機中,然后顯示時在相應解碼顯示即可。

      然后,網絡傳輸的單位也是字節,因此java中的字符串在傳輸之前如果不進行手工編碼那么會被默認按照操作系統的編碼格式進行編碼,到客戶端再按照默認格式解碼,如果都是中文環境通常沒有問題,但是如果兩邊的默認編碼不一致就比較容易導致編碼,因此還是建議手動指定特定的編碼和解碼格式。

      而對于文件下載,客戶端不同瀏覽器識別的編碼也不同,但是基本上都識別UTF-8編碼以及ISO-8859-1編碼,后者firefox不能識別,并且如果文件名不是全中文還會導致被截斷,因此我還是選擇采用UTF-8編碼

      最后,貼上代碼

      由于其它功能都被拆分出去了,就不貼了,核心部分代碼都在這里。

      下面的代碼在IE6-9、firefox、chrome測試都可以正常下載

      String us = request.getHeader("user-Agent");
      if(ua!=null){
          ua = ua.toLowerCase();
          //IE6截取文件名避免亂碼
          if(ua.contains("msie 6")){
              //文件名中有空格,encode后會變成+,為讓其正確顯示空格將其替換為%20
           //getSubStr方法是根據字節數截取長度超過150字節后的字符 filename = URLEncoder.encode(getSubStr(filename),"utf-8").replaceAll("\\+","20%"); }else if(ua.contains("firefox")){ //編碼成 =?gb2312?B?xxxxxxxx?=的格式,firefox支持這種格式,這里盡量指定編碼類型,否則可能解析不了 filename = MimeUtility.encodeWord(filename,"utf-8","B");
      response.setHeader("Content-disposition", "attachment; filename=\"+filename+\"");
          }else{
              filename = URLEncoder.encode(filename,"utf-8").replaceAll("\\+","20%");
          }
      }
      
      response.setContentType("application/x-download;");
      response.addHeader("Content-Disposition",filename)
      OutputStream out = response.getOutputStream();
      out.write(contents);
      out.flush()

       

      參考資料:http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in-http

       

      posted @ 2014-03-13 19:15  逆風之羽  閱讀(2238)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 伊人久久大香线蕉av色婷婷色| 亚洲伊人情人综合网站| 亚洲最大成人在线播放| 国产精品特级毛片一区二区三区| 亚洲av第三区国产精品| 亚洲这里只有久热精品伊人| 国产福利酱国产一区二区| 久久精品国产99久久六动漫| 亚洲人成网站77777在线观看| 久久96热人妻偷产精品| 国产制服丝袜无码视频| 自拍偷自拍亚洲精品熟妇人| 福利在线视频一区二区| 久久无码中文字幕免费影院| 又爽又黄又无遮挡的视频 | 西西人体大胆444WWW| 亚洲熟妇丰满多毛xxxx| 国内精品亚洲成av人片| 无码一区二区三区av在线播放| 日韩淫片毛片视频免费看| 国产成人欧美一区二区三区在线 | 老熟女熟妇一区二区三区| 国产精品一区二区在线欢| 亚州中文字幕一区二区| 青青草无码免费一二三区| 久热这里只精品视频99| 一本色道婷婷久久欧美| 国产精品毛片一区视频播| 另类 亚洲 图片 激情 欧美| 久久96热在精品国产高清| 熟女少妇精品一区二区| 欧美牲交a欧美牲交aⅴ图片| 循化| 国产AV永久无码青青草原| 日本www一道久久久免费| 精品国产一区二区三区性色| 青岛市| 91亚洲一线产区二线产区| 无码人妻久久久一区二区三区| 国内熟女中文字幕第一页| 四虎成人精品无码永久在线 |