我这里有个QT的。
8 bit的谁又啊?
我自己写的,高手们见笑
/// <summary>
/// Dncodes a string using Quoted-Printable encoding (see RFC 1521)
/// </summary>
/// <param name="src">QP编码的源代码</param>
/// <param name="charset">字符集</param>
/// <returns>字符</returns>
public static string ConvertFromQP(string src, string charset)
{
if (src == null) // 非空?
{
return null;
} char[] source = src.ToCharArray();
byte[] dest = new byte[source.Length];
char[] rtn = new char[source.Length]; int nDest = 0;
char ch; for (int i = 0; i < source.Length; i++) // a loop
{
ch = source[i]; if (ch == '=') // 开始解码,读两个字母
{
byte hi = Byte.Parse(source[++i].ToString(), NumberStyles.HexNumber);
byte lo = Byte.Parse(source[++i].ToString(), NumberStyles.HexNumber);
dest[nDest++] = (byte)(hi << 4 | lo); // 位运算,得出结果 }
else // 不必解码
{
char[] cTmp = {ch};
dest[nDest++] = Encoding.ASCII.GetBytes(cTmp)[0];
 
}
} // 转化到相应的代码页,很危险的
Decoder d = Encoding.GetEncoding(charset).GetDecoder();
d.GetChars(dest, 0, dest.Length, rtn, 0); return new string(rtn).Trim();
}

解决方案 »

  1.   

    to hwndhwnd(何宗键):
    我觉得下面这个方法可以,但汉字的问题没有解决。
    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;                                        
    }
      

  2.   

    看看偶的:
    string DeCode(string input)
    {
    System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("gb2312");
    string temp;
    int cnt=0;
    for(int i=0;i!=-1;i=input.IndexOf("=",i+1))
    cnt++;
    byte[] b=new byte[cnt];
    cnt=0;
    for(int i=0;i!=-1;i=input.IndexOf("=",i+1))
    {
    temp=input.Substring(i+1,2);
    b[cnt++]=byte.Parse(temp,System.Globalization.NumberStyles.HexNumber);
    }
    return encoding.GetString(b);
    }
    ///////////////////////////////////
    附:=A3=AC=C4=E3=BA=C3=A3=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=D6=C2=C0=F1=A3=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=CC=EF=C4=BE=C1=D6=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1
    解码结果:
    ",你好!          致礼!        田木林        "//无引号