今天我遇到一个问题,就是在用POP3接受邮件(标题,内容都是中文的),在现实的时候出现乱码.
主题:=?gb2312?B?vrTXow==?=
这个应该怎么解码阿.谁可给个提示或则代码阿  是VC 写的阿.高分相送阿.

解决方案 »

  1.   

    =?gb2312?B?vrTXow==?= 
    是被编码的标题=? 和 ?=  是头和尾gb2312 说明是gb2312编码B 说明是 Base64vrTXow==就是Base64编码的标题   你需要解码
      

  2.   

    标题中常用的编码有
    ?B?==base64
    ?q?==quoted-printable
      

  3.   

    试下这个函数能不能转换
    string NewString(LPCTSTR str)
    { int slen = strlen(str);
    char* buffer = new char[slen];
    int len = MultiByteToWideChar
    (CP_ACP,0,str,strlen(str),buffer,slen);
    if(len>0 && len < slen)
    {
    buffer[len]=0;
    }
            std::string newStr = buffer ;
    delete[] buffer;
    return newStr;
    }
      

  4.   

    我前几天刚好写过SMTP协议的程序,楼主要base64编码的代码的就把邮箱告诉我,我发给你
      

  5.   

    [email protected]     
      

  6.   

    大侠们 我这有个这么一个方法
    我就不知道m_pbInput,pbOutput 这俩个参数是具体含义,我这是从MIME编码器代码看到了,请教一下,讲一下含义,谢谢
    int CMimeCodeBase64::Decode(unsigned char* pbOutput, int nMaxSize)
    {
    const unsigned char* pbData = m_pbInput;
    const unsigned char* pbEnd = m_pbInput + m_nInputSize;
    unsigned char* pbOutStart = pbOutput;
    unsigned char* pbOutEnd = pbOutput + nMaxSize; int nFrom = 0;
    unsigned char chHighBits = 0; while (pbData < pbEnd)
    {
    if (pbOutput >= pbOutEnd)
    break; unsigned char ch = *pbData++;
    if (ch == '\r' || ch == '\n')
    continue;
    ch = (unsigned char) DecodeBase64Char(ch);
    if (ch >= 64) // invalid encoding, or trailing pad '='
    break; switch ((nFrom++) % 4)
    {
    case 0:
    chHighBits = ch << 2;
    break; case 1:
    *pbOutput++ = chHighBits | (ch >> 4);
    chHighBits = ch << 4;
    break; case 2:
    *pbOutput++ = chHighBits | (ch >> 2);
    chHighBits = ch << 6;
    break; default:
    *pbOutput++ = chHighBits | ch;
    }
    } return (int)(pbOutput - pbOutStart);
    }