smtp,pop,imap协议规定,在发送汉字等双字节字符时,需要进行编码。
请问是采用什么方式编码。例如:“测试”编码为“bUuL1Q”.

解决方案 »

  1.   

    /*将数据转化为Base64编码字符串*/
    private string AuthStream(String strCmd) 

    try 

    byte[] by=Encoding.Default.GetBytes(strCmd.ToCharArray()); 
    strCmd=Convert.ToBase64String(by); 

    catch(Exception ex) 
    {return ex.ToString();} 
    return strCmd; 
    }
      

  2.   

    /*解码*/
    private String deCode(String strSrc)
    {
    int start=strSrc.IndexOf("=?GB2312?");
    if (start==-1)
    {
    start=strSrc.IndexOf("=?gb2312?");
    }
    if(start>=0)
    {
    String strHead=strSrc.Substring(0,start);
    String strMethod=strSrc.Substring(start+9,1);
    strSrc=strSrc.Substring(start+11);
    int end=strSrc.IndexOf("?=");
    if (end==-1)
    {
    end=strSrc.Length;
    }
    String strFoot=strSrc.Substring(end+2,strSrc.Length-end-2);
    strSrc=strSrc.Substring(0,end);
    if(strMethod=="B")
    strSrc=strHead+deCodeB64(strSrc)+strFoot;
    else
    {
    if(strMethod=="Q")
    strSrc=strHead+deCodeQP(strSrc)+strFoot;
    else
    strSrc=strHead+strSrc+strFoot;
    }
    start=strSrc.IndexOf("=?GB2312?");
    if(start==-1)
    {
    start=strSrc.IndexOf("=?gb2312?");
    }
    if(start>=0)
    strSrc=deCode(strSrc);
    }
    return strSrc;
    }

    /*Base64 解码*/
    private String deCodeB64(String strSrc)
    {
    try 

    if(strSrc!="")
    {
    byte[] by=Convert.FromBase64String(strSrc); 
    strSrc=Encoding.Default.GetString(by);
    }

    catch(Exception ex) 
    {return ex.ToString();} 
    return strSrc;
    }

    /*Quoted-Printable 解码*/
    private String deCodeQP(String strSrc)
    { char ch, ch1, ch2;
    char[] hz;
    String strRet="";
    hz=strSrc.ToCharArray();
    for (int i=0;i<strSrc.Length;i++) 
    {
    ch = hz[i];
    if (ch == '=') 
    {
    i++;
    ch1 = hz[i];
    if (ch1 == '\n') continue;
    i++;
    ch2 = hz[i];
    int chint1,chint2;
    if (ch1>'9')
    {
    chint1=(ch1-'A'+10)*16;
    }
    else
    {
    chint1=(ch1-'0')*16;
    }
    if (ch2>'9')
    {
    chint2=ch1-'A'+10;
    }
    else
    {
    chint2=ch1-'0';
    }
    ch = Convert.ToChar(chint1 + chint2);
    }
    strRet += ch.ToString();
    }
    return strRet;
    }