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