国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Javamail中附件中文名字亂碼祥解

2019-11-18 16:20:33
字體:
來源:轉載
供稿:網友

  現在研究javamail的人越來越多,現在我就談談在javamail中大家都會遇到的附件中文問題,由于sun的java的中文問題,導致當附件是中文時將出現亂碼,導致程序異常,如何避免呢??我在學習javamail時采用如下方法首先對郵件體進行分析,首先判斷郵件體是否有附件:
 Object out_content = messag[i].getContent();
if (!(out_content instanceof Multipart)){//不是復合郵件體,既是不帶附件。
              partname = new String[0];
              return partname;
           }
如果是復合郵件體,那么就可以調用如下的方法取得中文文件名:
public  static  String  getISOFileName(Part  body){  
               //設置一個標志,判斷文件名從Content-Disposition中獲取還是從Content-Type中獲取  
              
 boolean  flag=true;  
               if(body==null){  
                       return  null;  
               }  
               String[]  cdis;  
               try{  
                       cdis=body.getHeader("Content-Disposition");  
               }  
               catch(Exception  e){  
                       return  null;  
               }  
               if(cdis==null){  
                       flag=false;  
               }  
               if(!flag){  
                       try{  
                               cdis=body.getHeader("Content-Type");  
                       }  
                       catch(Exception  e){  
                               return  null;  
                       }  
               }  
               if(cdis==null){  
                       return  null;  
               }  
               if(cdis[0]==null){  
                       return  null;  
               }  
               //從Content-Disposition中獲取文件名  
               if(flag){  
                       int  pos=cdis[0].indexOf("filename=");  
                       if(pos<0){  
                               return  null;  
                       }  
                       //如果文件名帶引號  
                       if(cdis[0].charAt(cdis[0].length()-1)=='"'){  
                               return  cdis[0].substring(pos+10,cdis[0].length()-1);  
                       }  
                       return  cdis[0].substring(pos+9,cdis[0].length());  
               }else{  
                       int  pos=cdis[0].indexOf("name=");  
                       if(pos<0){  
                               return  null;  
                       }  
                       //如果文件名帶引號  
                       if(cdis[0].charAt(cdis[0].length()-1)=='"'){  
                               return  cdis[0].substring(pos+6,cdis[0].length()-1);  
                       }  
                       return  cdis[0].substring(pos+5,cdis[0].length());  
               }  
       }  
但是有一種情況下,取得的中文文件名也是亂碼,原因有的郵件服務器在發送郵件時,對附件名進行了特殊的編碼,解決如上問題的方法如下:
首先:
1)用如上的方法取得中文文件名:
String filename= new String(getISOFileName(part).getBytes("ISO-8859-1"),"gb2312");
然后創建文件,如果發生FileNotFoundException異常,說明取得的文件名是經過特殊編碼的--我們取得到的未解碼的,是亂嗎,那么就要用javamail提供的函數decodeText進行解碼。具體方法如下。
try{
        myFileoutputstream= new FileOutputStream(filename);
    }catch(FileNotFoundException fe){
        try{
              if (filepath.exists()){
                 filename = new File(filepath,MimeUtility.decodeText(getISOFileName(part)));
   }catch(Exception e){
    System.out.    }
   }catch(Exception e){
    System.out.println("getpart(int i)重新生成文件:"+e.toString());
    }
}

經過如上步驟,就能徹底解決javamail附件中文名亂碼問題了。
祝你好運,如果還有任何疑問,歡迎切磋,我的郵件:

bill-轉自:csdn進入討論組討論。

(出處:http://m.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 田林县| 阿图什市| 扶余县| 临泉县| 凤庆县| 洛宁县| 冀州市| 弋阳县| 华蓥市| 乡城县| 嘉义县| 新巴尔虎右旗| 泰安市| 葫芦岛市| 武平县| 霍州市| 张掖市| 通许县| 昌平区| 东光县| 乌什县| 新建县| 长葛市| 乌兰县| 沁源县| 封丘县| 上思县| 石渠县| 卫辉市| 翼城县| 凤庆县| 鄢陵县| 卢龙县| 临朐县| 通榆县| 镇平县| 南雄市| 锡林浩特市| 黄冈市| 南昌县| 大新县|