日期:2014-05-18  浏览次数:20444 次

ustbwuyi求见孟子
孟子老大,看过你关于Quoted       Printable编码方式的转化的方法,即用%替代=号然后进行处理,但是我在用jmail接收雅虎邮件的时候,内容的编码是正确的,但是标题依然出现乱码,我的处理方法为
    subject   =   subject.Replace( "= ",   "% ");
    subject   =   System.Web.HttpUtility.UrlDecode(subject,   System.Text.Encoding.UTF8);

不知道有何不妥?另外,如果在接收邮件以前判断改邮件是Quoted       Printable编码格式的?

------解决方案--------------------
邮件中文附件名乱码的问题我碰到过,我是在做其他平台下的邮箱开发遇到的,查过相关资料,道理都是一样的,希望对你有用:
这个问题主要是邮件的默认字符集标准引起的(一下也说不清楚),所以你需要对邮件的中文附件名单独进行编码,但绝对不是调用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+| "|)
------解决方案--------------------
=?utf-8?B?xxxxxxx?=

其中xxx代表base64

如果是qp编码的话就是

=?utf-8?Q?xxxxxxx?=

其中xxx代表Quoted Printable

当然uft-8表示字符集 也可以用gb2312

这样的话就是

=?字符集?编码格式?xxxx?=

用正则表达式来获取字符集和编码格式,然后解码就OK了,
正则表达式你可以发信息给过客,我就不献丑了


------解决方案--------------------
呵呵 IM 给你了
------解决方案--------------------
给你一段解析头的代码吧

传进去 =?gb2312?Q?xx?= 这样的字符就可以了
但是不能是乱码 呵呵


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();
}
------解决方案--------------------
不好意思,我这周在天津出差,暂时无法给你测试.应该是编码格式的问题,可以换换别的方法