這篇“Javamail中附件中文名字亂碼怎么解決”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“Javamail中附件中文名字亂碼怎么解決”文章吧。
首先判斷郵件體是否有附件:
object out_content = message[i].getContent();
if (!(out_content instanceof Multipart)){//不是復(fù)合郵件體,既是不帶附件。
partname = new String[0];
return partname;
}
如果是復(fù)合郵件體,那么就可以調(diào)用如下的方法取得中文文件名:
public static String getISOFileName(Part body){
//設(shè)置一個(gè)標(biāo)志,判斷文件名從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;
}
//如果文件名帶引號(hào)
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;
}
//如果文件名帶引號(hào)
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ā)送郵件時(shí),對(duì)附件名進(jìn)行了特殊的編碼,解決如上問(wèn)題的方法如下:
首先:
1)用如上的方法取得中文文件名:
String filename= new String(getISOFileName(part).getBytes("ISO-8859-1"),"gb2312");
然后創(chuàng)建文件,如果發(fā)生FileNotFoundException異常,說(shuō)明取得的文件名是經(jīng)過(guò)特殊編碼的--我們?nèi)〉玫降奈唇獯a的,是亂嗎,那么就要用javamail提供的函數(shù)decodeText進(jìn)行解碼。具體方法如下。
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());
}
}
以上就是關(guān)于“Javamail中附件中文名字亂碼怎么解決”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。