你那个Subject是不是分开两截的?
如果是的话是不能分别解码的,要合起来再解码。

解决方案 »

  1.   

    string base64="UDJQwcTM7LXEyrXA/ShTb2NrZXQp";
    byte[] data = System.Convert.FromBase64String(base64);
    MessageBox.Show(System.Text.Encoding.GetEncoding("gb2312").GetString(data));难道这样有问题?
      

  2.   

    siugwan(火凤凰):
    可以说得更详细一点吗?我不是太懂,我贴一段吧.
    +OK 1771 octets
    Received: from mail3.corpease.net (unknown [61.145.121.45])
    by 192.168.1.210 (Coremail) with SMTP id z4C+BCWCNUH4s3oD.1
    for <[email protected]>; Wed, 01 Sep 2004 16:02:46 +0800 (CST)
    X-Originating-IP: [61.145.121.45]
    Received: from unknown (unknown [192.168.1.209])
    by mail3.corpease.net (coremail) with SMTP id 2B22F13C328
    for <[email protected]>; Wed,  1 Sep 2004 16:02:33 +0800 (HKT)
    Received: from usercom (unknown [221.122.40.148])
    by mail25 (Coremail:corpease.net) with SMTP id cZE4ABiCNUEVByiU.1
    for <[email protected]>; Wed, 01 Sep 2004 16:02:33 +0800 (HKT)
    X-TEBIE-Originating-IP: [221.122.40.148]
    Message-ID: <000701c48ffa$08d1ce20$fe00a8c0@usercom>
    From: =?gb2312?B?wrfWvsP3?= <[email protected]>
    To: "zh" <[email protected]>
    References: <[email protected]>
    Subject: =?gb2312?B?UmU6IFAyUMHEzOy1xMq1wP0oU29ja2V0KQ==?=
    Date: Wed, 1 Sep 2004 16:02:31 +0800
    MIME-Version: 1.0
      

  3.   

    coollzh(良子) :
    谢了,我试了一下,成功!我想再问一个问题:
    我是参考这上面的一个贴子写的,原作者说要分B和Q来进行"解码",我不太懂
      

  4.   

    续:也就是说=?gb2312?B?UmU6IFAyUMHEzOy1xMq1wP0oU29ja2V0KQ==?=
    =?gb2312?后面可能是B,也可能是Q,我不明白
      

  5.   

    B= base64 编码
    Q=QP Quoted-Printable 我有个解码库,共享出来,该代码被sourceforge用了//////////////////////////////////////
    //copyright 2003 lzh
    //email:[email protected]
    //module:QP decoder
    //////////////////////////////////////
    using System;
    using System.Text;namespace DecodeQPMod
    {
    /// <summary>
    /// 对一段包含QP编码的字符串进行解码
    /// Author:[email protected]
    /// 
    /// </summary>
    public class DecodeQP
    {
    public DecodeQP()
    {
    } /// <summary>
    /// 一段连续的QP编码的字符串进行解码
    /// </summary>
    /// <param name="HexString">要解码的一段连续的QP编码的字符串</param>
    /// <param name="encode">编码方式</param>
    /// <returns>已解码的字符串</returns>
    private string ConvertHexToString(string HexString,System.Text.Encoding encode)
    {
    if(HexString==null||HexString.Equals("")) return ""; if(HexString.StartsWith("=")) HexString=HexString.Substring(1);

    string[] aHex= HexString.Split(new char[1]{'='});
    byte[] abyte = new Byte[aHex.Length];

    for(int i=0;i<abyte.Length;i++)
    {
    // Console.WriteLine(aHex[i]);
    abyte[i] =(byte) int.Parse(aHex[i],System.Globalization.NumberStyles.HexNumber);
    }
    return encode.GetString(abyte);
    } /// <summary>
    /// 对包含QP编码的字符串进行解码
    /// </summary>
    /// <param name="HexString">要解码的包含QP编码的字符串</param>
    /// <param name="encode">字符编码方式,建议用Default</param>
    /// <param name="nStart">开始解码的字符开始位置,一般为0</param>
    /// <returns>已解码的字符串</returns>
    public string ConvertHexContent(string HexString,System.Text.Encoding encode,long nStart)
    {
    if(nStart>=HexString.Length) return HexString; //存放要解码的字符串
    StringBuilder sbHex = new  StringBuilder();
    sbHex.Append("");
    //存放已经解码过的字符串
    StringBuilder sbEncoded = new StringBuilder();
    sbEncoded.Append("");
    //是否已经碰到QP的字符串
    bool isBegin = false;
    string temp;
    int i = (int)nStart; while(i<HexString.Length )
    {
    //初始化下次循环
    sbHex.Remove(0,sbHex.Length);
    isBegin = false; while(i<HexString.Length )
    {
    temp = HexString.Substring(i,1);//还没有开始碰到第一个QP字符时每次取一个字符进行比较
    if(temp.StartsWith("=")) 
    {
    temp = HexString.Substring(i,3);//对于以等号开始的每次取3个字符
    if(temp.EndsWith("\r\n"))//换行符
    {
    if(isBegin)
    break;
    // sbEncoded.Append("");
    i=i+3;
    }
    else if(!temp.EndsWith("3D"))
    {
    sbHex.Append(temp);
    isBegin = true;//已开始碰到第一个QP字符,放到QP缓冲区
    i=i+3;
    }
    else //如果是以3D结尾则该字符串只是一个等号,放到已解码缓冲区
    {
    if(isBegin)
    break;

    sbEncoded.Append("=");
    i=i+3;
    } }
    else
    {
    if(isBegin)//已经取得整块的QP字符串,跳出该次循环
    break;
    sbEncoded.Append(temp);//不是QP字符则放到已解码缓冲区中
    i++;
    } }
    //一次循环结束,把已经取得整块的QP字符串进行解码
    sbEncoded.Append(this.ConvertHexToString(sbHex.ToString(),encode)); 
    }

    return sbEncoded.ToString();
    }
    /// <summary>
    /// 对包含QP编码的字符串进行解码,用Default字符编码方式,从字符串开始位置进行解码
    /// </summary>
    /// <param name="HexString">要解码的包含QP编码的字符串</param>
    /// <returns>已解码的字符串</returns>
    public  string ConvertHexContent(string HexString)
    {
    if(HexString==null || HexString.Equals("")) return HexString; return this.ConvertHexContent(HexString,Encoding.Default,0);

    }
    }
    }