Quoted-Printable编码实现
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;
}
Quoted-Printable编码实现相关推荐
- Python3 完成 QUOTED-PRINTABLE 编码及反翻译
想生成一个vcf时遇到了从字符串到 Quoted Printable编码转换的问题 1. 从手机里导出的vcf是这样的格式: BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF ...
- 邮件乱码破解大全(转贴)
在接收电子邮件时有时会发现邮件中的内容一片混乱,无法阅读.这主要是发.收邮件的编码和解码方式不统一造成的.本文介绍乱码生成的原理,并使用常用的收发E-mail的工具成功地模拟出各种编码方式造成的乱码, ...
- Python标准库介绍
1. 关于Python标准库 众所周知,Python是一个依赖强大的组件库完成对应功能的语言,为了便捷实现各项功能,前辈大牛们打造了多种多样的工具库公开提供给大众使用,而越来越多的库已经因为使用的广泛 ...
- Asp.net的加密解密技巧--[转载]
对于加密和解密,我们都知道.下面主要介绍的是ASP.NET中的加密和解密. 一.数据加密/编码算法列表 常见用于保证安全的加密或编码算法如下: 1.常用密钥算法 密钥算法用来对敏感数据.摘要.签名等信 ...
- Windows XP SP2疑难速解50问
一.SP2的十大亮点 要想系统地了解Windows XP SP2可能会引起的问题,并快速诊断问题的原因所在,应先对Windows XP SP2的新功能有个基本的了解,这就是Windows XP S ...
- Linux网络编程基础_6_应用层(下)--E-mail,WWW(大结局)
应用层(下) --E-mail,WWW 一.E-mail/电子邮件系统 1.电子邮件系统的组成结构 1)MTS(MessageTansfer System),邮件传输系统. 2)UA(UserAgen ...
- Python菜鸟学习手册14----标准库+代码实例
Python Standard Library 翻译: Python 江湖群 10/06/07 20:10:08 编译 0.1. 关于本书 0.2. 代码约定 0.3. 关于例子 0.4. 如何联系我 ...
- Python3.x 标准模块库目录(下篇)
Python Standard Library 翻译: Python 江湖群 10/06/07 20:10:08 编译 0.1. 关于本书 0.2. 代码约定 0.3. 关于例子 0.4. 如何联系 ...
- MIME类型,Content-Type
//指定返回的是一个不能被客户端读取的流,必须被下载 Response.ContentType = "application/x-msdownload" ...
- MIME类型是什么意思
MIME MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开.多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方 ...
最新文章
- python将数字转变为中文读法-python中将阿拉伯数字转换成中文的实现代码
- asp.net使用mysql教程_在C#程序中使用MYSQL数据库
- php 搜索名称或者编号,ECSHOP商品关键词模糊分词搜索插件,商品列表关键字加红功能-ecshop插件网...
- matlab gui打开fig文件,求助gui打开word文件及打开fig格式图片
- php实现页面雪花效果,JavaScript_使用javascript实现雪花飘落的效果,看了javascript网页特效实例大全 - phpStudy...
- (java ee,Eclipse J2EE最新版官方下载(Eclipse for Java EE Developers)
- python 编码问题之终极解决
- windows mysql5.7 忘记root密码
- 用postman做接口测试
- 软工专硕考研_2021考研人数将突破400万?录取率或成史低!
- 音乐后期处理:音乐失真效果制作
- 解决Carsim2016找不Liscens问题
- 【嵌入式模块】直流电机驱动L298N,TB6612详解
- 九章算术 五:《商功》
- Ubuntu下给Wine设置微软雅黑字体(4步操作)
- 微信PC端多开的秘密
- 【计算机毕业设计】外卖点餐源码
- python自动化测试登录_自动化测试(二)如何用python写一个用户登陆功能
- Xcode8/iOS10 升级后遇到的问题小结
- 掌握茼蒿施肥方式,想不高产都难。
热门文章
- 天昊生物16S扩增子绝对定量测序技术助力客户登陆Science of the Total Environment
- 分享阿里开源的一个流程图,工作流图插件g6
- OPPOA33_官方线刷包_救砖包_解账户锁
- 4K Wallpaper mac(4K壁纸软件) v2.1中文激活版
- 怎么判断一个回文字符串
- 小程序客服六大痛点总结!(附解决方案)
- java 协程线程的区别_用大白话讲进程和线程、协程的区别
- iOS后台音频播放及锁屏界面显示音频信息
- userdel 命令
- 运行Redshift需要什么样的电脑?如何选电脑配置