孟子老大,看过你关于Quoted   Printable编码方式的转化的方法,即用%替代=号然后进行处理,但是我在用jmail接收雅虎邮件的时候,内容的编码是正确的,但是标题依然出现乱码,我的处理方法为
  subject = subject.Replace("=", "%");
  subject = System.Web.HttpUtility.UrlDecode(subject, System.Text.Encoding.UTF8);不知道有何不妥?另外,如果在接收邮件以前判断改邮件是Quoted   Printable编码格式的?

解决方案 »

  1.   

    最后一句话说错了,不好意思,
    另外,如果在接收邮件以前判断改邮件是Quoted   Printable编码格式的?
    应该是如何在接收邮件前判断该邮件是QP格式的是不是判断JMsg.Charset?
      

  2.   

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

  3.   

    以前也遇到过
    好像设置了JMsg.Charset就可以了
      

  4.   

    snowdish(小菜籽)  情况貌似不同,我的乱码是QP格式的,乱码为=BB=DD=CC形式的
      

  5.   

    顶吧 我也是用utf-8接收邮件的但是偶尔出现乱码?
      

  6.   

    你这里人气不错 有过有时间帮我回答以下 这个问题 关于关闭线程的!
    http://community.csdn.net/Expert/topic/5610/5610125.xml?temp=.7786219
      

  7.   

    =?utf-8?B?xxxxxxx?=其中xxx代表base64如果是qp编码的话就是=?utf-8?Q?xxxxxxx?=其中xxx代表Quoted Printable当然uft-8表示字符集 也可以用gb2312这样的话就是 =?字符集?编码格式?xxxx?=用正则表达式来获取字符集和编码格式,然后解码就OK了,
    正则表达式你可以发信息给过客,我就不献丑了
      

  8.   

    foyuan(暴走零零漆) ( )尝试了你的方法,但是我接收到的Msg.Subject已经是乱码了,所有截取字符串没有用,
    是不是应该先转化成char?
      

  9.   

    已经是乱码了??默认的pop3协议应该是uft-8格式的 如果不行你用gb2312或者gbk试一下 
      

  10.   

    给你一段解析头的代码吧传进去 =?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();
            }
      

  11.   

    上面的代码用到下面这两个方法 public static byte[] GetByteArray(string s)
            {
                // 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);
            }
      

  12.   

    superdullwolf(超级大笨狼,每天要自强,MVP) ( ) 信誉:100    Blog   加为好友  2007-06-20 12:50:19  得分: 0  
     
     
       ustbwuyi 是北科大的吗?
      
     
    是的
      

  13.   

    net_lover(【孟子E章】) ( ) 信誉:140    Blog   加为好友  2007-06-20 13:03:41  得分: 0  
     
     
       不好意思,我这周在天津出差,暂时无法给你测试.应该是编码格式的问题,可以换换别的方法
      
     
    汗,等了你一上午啊,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);
                
      

  14.   

    duke731(【孔子R章)
    ----------------------
    晕!!你的签名!!!
      

  15.   

    USB你终于把孟子求来了哈,加油~~~