我这里有个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();
}
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();
}
我觉得下面这个方法可以,但汉字的问题没有解决。
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;
}
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
解码结果:
",你好! 致礼! 田木林 "//无引号