Posted on 2005-04-19 14:39
風(fēng)太少 閱讀(371)
評論(0) 編輯 收藏
現(xiàn)在研究javamail的人越來越多,現(xiàn)在我就談?wù)勗趈avamail中大家都會遇到的附件中文問題,由于sun的java的中文問題,導(dǎo)致當附件是中文時將出現(xiàn)亂碼,導(dǎo)致程序異常,如何避免呢??我在學(xué)習(xí)javamail時采用如下方法首先對郵件體進行分析,首先判斷郵件體是否有附件:
Object out_content = messag[i].getContent(); if (!(out_content instanceof Multipart)){//不是復(fù)合郵件體,既是不帶附件。 partname = new String[0]; return partname; } | 如果是復(fù)合郵件體,那么就可以調(diào)用如下的方法取得中文文件名: public static String getISOFileName(Part body){ //設(shè)置一個標志,判斷文件名從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()); } } | 但是有一種情況下,取得的中文文件名也是亂碼,原因有的郵件服務(wù)器在發(fā)送郵件時,對附件名進行了特殊的編碼,解決如上問題的方法如下: 首先: 1)用如上的方法取得中文文件名: String filename= new String(getISOFileName(part).getBytes("ISO-8859-1"),"gb2312"); 然后創(chuàng)建文件,如果發(fā)生FileNotFoundException異常,說明取得的文件名是經(jīng)過特殊編碼的--我們?nèi)〉玫降奈唇獯a的,是亂嗎,那么就要用javamail提供的函數(shù)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.println("getpart(int i)重新生成文件:"+e.toString()); } }catch(Exception e){ System.out.println("getpart(int i)重新生成文件:"+e.toString()); } } |
經(jīng)過如上步驟,就能徹底解決javamail附件中文名亂碼問題了。 祝你好運,如果還有任何疑問,歡迎切磋,我的郵件:
bill-轉(zhuǎn)自:csdn
|
參與論壇討論:http://www.matrix.org.cn/forum.asp 更多技術(shù)文章:http://www.matrix.org.cn/article.asp Matrix java門戶:http://www.matrix.org.cn |
原文地址:http://www.matrix.org.cn/article/1427.html 任何獲得許可轉(zhuǎn)載此文章,須在顯著位置標明Matrix的原文地址,并做鏈接至原文頁面,查看詳細的版權(quán)說明 |