/// <summary>
/// quoted-printable 解码器.
/// </summary>
/// <param name="encoding">字符编码</param>
/// <param name="data">待解码的字符串</param>
/// <returns></returns>
public static string QDecode(System.Text.Encoding encoding,string data)
{
MemoryStream strm = new MemoryStream(System.Text.Encoding.ASCII.GetBytes(data));
int b = strm.ReadByte(); MemoryStream dStrm = new MemoryStream(); while(b > -1){
// Hex eg. =E4
if(b == '='){
byte[] buf = new byte[2];
strm.Read(buf,0,2); // <CRLF> followed by =, it's splitted line
if(!(buf[0] == '\r' && buf[1] == '\n')){
try{
int val = int.Parse(System.Text.Encoding.ASCII.GetString(buf),System.Globalization.NumberStyles.HexNumber);
string encodedChar = encoding.GetString(new byte[]{(byte)val});
byte[] d = System.Text.Encoding.Unicode.GetBytes(encodedChar);
dStrm.Write(d,0,d.Length);
}
catch{ // If worng hex value, just skip this chars
}
}
}
else{
string encodedChar = encoding.GetString(new byte[]{(byte)b});
byte[] d = System.Text.Encoding.Unicode.GetBytes(encodedChar);
dStrm.Write(d,0,d.Length);
} b = strm.ReadByte();
} return System.Text.Encoding.Unicode.GetString(dStrm.ToArray());
}