用JavaMail接收邮件 总是有乱码
用MimeUtility.decodeText进行转换
乱码的地方好了 可是原本没有乱码的地方变乱码了
试了网上好多方法  都不行 
请问到底怎么搞啊?
谢谢!

解决方案 »

  1.   


    public InternetAddress address(String str)
    {
    InternetAddress address1 = new InternetAddress();
    int pos = str.indexOf("<");
    if(pos==-1)
    {
    address1.setAddress(str);
    }
    else{
    try{
    address1.setPersonal(str.substring(0,pos),"gb2312");
    }catch(Exception e){}
    address1.setAddress(str.substring(pos+1,str.length()-1));
    }
    return address1;
    }
    public InternetAddress[] address(String[] str)
    {
    InternetAddress address1[] = new InternetAddress[str.length];
    for(int i=0;i<str.length;i++)
    {
    address1[i]=address(str[i]);
    }
    return address1;
    }
      

  2.   


    public String decodeAddress(String str)
    {
    StringBuffer sb = new StringBuffer();
    int start = str.toLowerCase().indexOf("?b?");
    if(start>0)
    {
    String code = str.substring(2,start);
    if(code.equals("x-unknown"))code="GBK";
    int end = str.indexOf("?=");
    sb.append(Base64.decode(str.substring(start+3,end),code));
    if(end+2<str.length())
    sb.append(str.substring(end+2,str.length()));
    }
    else return str;
    return sb.toString();
    }
    //文件名
    public String decodeName(String str)
    {
    StringBuffer sb = new StringBuffer();
    String[] strs = tools.split(str," ");
    for(int i=0;i<strs.length;i++)
    {
    if(i>0)sb.append(" ");
    int start = strs[i].toLowerCase().indexOf("?b?");
    if(start>0)
    {
    String code = str.substring(2,start);
    if(code.equals("x-unknown"))code="GBK";
    int end = strs[i].indexOf("?=");
    sb.append(Base64.decode(strs[i].substring(start+3,end),code));
    }
    else sb.append(strs[i]);
    }
    return sb.toString();
    }