欢迎访问:常州市武进区嘉泽中心小学网站 !今天是:
栏目列表
您现在的位置是:首页>>教师>>计算机技术>>程序设计>>杂项>>文章内容
MIME之Quoted-Printable编解码
发布时间:2008-11-20   点击:   来源:本站原创   录入者:佚名
 

Quoted-Printable也是MIME邮件中常用的编码方式之一。同Base64一样,它也将输入的字符串或数据编码成全是ASCII码的可打印字符串。

Quoted-Printable编码的基本方法是:输入数据在33-60、62-126范围内的,直接输出;其它的需编码为“=”加两个字节的HEX码(大写)。为保证输出行不超过规定长度,可在行尾加“=\r\n”序列作为软回车。

int EncodeQuoted(const unsigned char* pSrc, char* pDst, int nSrcLen, int nMaxLineLen)

{

    int nDstLen;        // 输出的字符计数

    int nLineLen;       // 输出的行长度计数

 

    nDstLen = 0;

    nLineLen = 0;

 

    for (int i = 0; i < nSrcLen; i++, pSrc++)

    {

        // ASCII 33-60, 62-126原样输出,其余的需编码

        if ((*pSrc >= '!') && (*pSrc <= '~') && (*pSrc != '='))

        {

            *pDst++ = (char)*pSrc;

            nDstLen++;

            nLineLen++;

        }

        else

        {

            sprintf(pDst, "=%02X", *pSrc);

            pDst += 3;

            nDstLen += 3;

            nLineLen += 3;

        }

 

        // 输出换行?

        if (nLineLen >= nMaxLineLen - 3)

        {

            sprintf(pDst, "=\r\n");

            pDst += 3;

            nDstLen += 3;

            nLineLen = 0;

        }

    }

 

    // 输出加个结束符

    *pDst = '\0';

 

    return nDstLen;

}

Quoted-Printable解码很简单,将编码过程反过来就行了。

int DecodeQuoted(const char* pSrc, unsigned char* pDst, int nSrcLen)

{

    int nDstLen;        // 输出的字符计数

    int i;

 

    i = 0;

    nDstLen = 0;

 

    while (i < nSrcLen)

    {

        if (strncmp(pSrc, "=\r\n", 3) == 0)        // 软回车,跳过

        {

            pSrc += 3;

            i += 3;

        }

        else

        {

            if (*pSrc == '=')        // 是编码字节

            {

                sscanf(pSrc, "=%02X", pDst);

                pDst++;

                pSrc += 3;

                i += 3;

            }

            else        // 非编码字节

            {

                *pDst++ = (unsigned char)*pSrc++;

                i++;

            }

  

            nDstLen++;

        }

    }

 

    // 输出加个结束符

    *pDst = '\0';

 

    return nDstLen;

}

 

[相关资源]

  • RFC/STD文档:Internet FAQ Archives
  • bhw98的专栏:http://{域名已经过期}/develop/author/netauthor/bhw98/

    首次发布: 2003-06-23
    最后修订: 2003-06-23

     


  • 附件:
      关闭窗口
      打印文档
      账号登录
      保持登录 忘记密码?
      账号与武进教师培训平台同步