孟子老大,看过你关于Quoted Printable编码方式的转化的方法,即用%替代=号然后进行处理,但是我在用jmail接收雅虎邮件的时候,内容的编码是正确的,但是标题依然出现乱码,我的处理方法为
subject = subject.Replace("=", "%");
subject = System.Web.HttpUtility.UrlDecode(subject, System.Text.Encoding.UTF8);不知道有何不妥?另外,如果在接收邮件以前判断改邮件是Quoted Printable编码格式的?
subject = subject.Replace("=", "%");
subject = System.Web.HttpUtility.UrlDecode(subject, System.Text.Encoding.UTF8);不知道有何不妥?另外,如果在接收邮件以前判断改邮件是Quoted Printable编码格式的?
另外,如果在接收邮件以前判断改邮件是Quoted Printable编码格式的?
应该是如何在接收邮件前判断该邮件是QP格式的是不是判断JMsg.Charset?
这个问题主要是邮件的默认字符集标准引起的(一下也说不清楚),所以你需要对邮件的中文附件名单独进行编码,但绝对不是调用urlencode这个方法,通常,中文附件名需要用gb2312对其进行编码.编码后的附件名类似
Content-Disposition: attachment;
filename="=?gb2312?B?x+C6o7LiytRfudzA7dSxLmlk?="
其中的gb2312就是使用的编码,后面的是编码后的附件名.
给出我的示例,你去找找.net下的,基本一样的
Set header = child.CreateHeader("Content-Disposition")
Call header.AddValText(attachs(i),"GB2312")
Call header.SetHeaderVal(|Attachment;filename="|+header.GetHeaderVal+|"|)
好像设置了JMsg.Charset就可以了
http://community.csdn.net/Expert/topic/5610/5610125.xml?temp=.7786219
正则表达式你可以发信息给过客,我就不献丑了
是不是应该先转化成char?
但是不能是乱码 呵呵
public static string Decode(string s)
{
StringBuilder retString = new StringBuilder();
Regex splitter = new Regex(@"(?<unencoded>((?!=\?).)*)?(?:=\?(?<charset>.*?)\?(?<cmd>\w)\?(?<subject>.*?)\?=)?");
MatchCollection mc = splitter.Matches(s);
foreach (Match m in mc)
{
if (m.Groups["unencoded"].Success)
{
retString.Append(m.Groups["unencoded"].Value);
}
if (m.Groups["charset"].Success && m.Groups["cmd"].Success && m.Groups["subject"].Success)
{
retString.Append(DecodeOne(m.Groups["charset"].Value, m.Groups["cmd"].Value, m.Groups["subject"].Value));
}
}
return retString.ToString();
}
{
// clemensv -- added check
if (s == null || s.Length == 0)
return new byte[0]; byte[] buffer = new byte[s.Length];
int bufferPosition = 0;
for (int i = 0; i < s.Length; i++)
{
if (s[i] == '=')
{
if (i < (s.Length - 2))
{
if (s[i + 1] == '\r' && s[i + 2] == '\n')
{
bufferPosition--;
}
else
{
buffer[bufferPosition] = System.Convert.ToByte(s.Substring(i + 1, 2), 16);
}
i += 2;
}
else
{
break;
}
}
else if (s[i] == '_')
{
buffer[bufferPosition] = 32;
}
else
{
buffer[bufferPosition] = (byte)s[i];
}
bufferPosition++;
}
byte[] newArray = new byte[bufferPosition];
Array.Copy(buffer, newArray, bufferPosition);
return newArray;
}
public static string DecodeOne(string charset, string cmd, string subject)
{
byte[] bArray; if (cmd == "Q") //querystring
{
bArray = GetByteArray(subject);
}
else if (cmd == "B")//base64
{
bArray = Convert.FromBase64String(subject);
}
else
{
return subject;
}
Encoding encoding = Encoding.GetEncoding(charset);
return encoding.GetString(bArray);
}
ustbwuyi 是北科大的吗?
是的
不好意思,我这周在天津出差,暂时无法给你测试.应该是编码格式的问题,可以换换别的方法
汗,等了你一上午啊,QQ给你发消息了
现在情况是这样的,雅虎用的应该是QP编码,但是它的格式是暴走零七所说的=?gb2312?Q?xx?=
xx代表QP编码,可能我用你的方法转化的时候连=?gb2312?Q?一起转化了,所以没有成功,但是我把xx这部分截出来也不行,因为我接收到的subject貌似已经是乱码了,所以无法在这部分乱码中把QP编码截取出来,不知道该怎么办,你看我的代码
subject = subject.Substring(subject.IndexOf("Q") , subject.LastIndexOf("=") - subject.IndexOf("Q")-1);
subject = subject.Replace("=", "%");
subject = System.Web.HttpUtility.UrlDecode(subject, System.Text.Encoding.UTF8);
----------------------
晕!!你的签名!!!