Quoted-printable 编码介绍、Quoted-printable编码解码转换方法

作者:mdxy-dxy 时间:2022-02-20 07:46:05 

Quoted-printable 可译为“可打印字符引用编码”、“使用可打印字符的编码”,我们收邮件,查看信件原始信息,经常会看到这种类型的编码!

Quoted-printable 编码介绍、Quoted-printable编码解码转换方法

最多时候,我们在邮件头里面能够看到这样的编码!Content-Transfer-Encoding:quoted-printable

它是多用途互联网邮件扩展(MIME) 一种实现方式。其中MIME是一个互联网标准,它扩展了电子邮件标准,致力于使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。目前http协议中,很多采用MIME框架!quoted-printable 就是说用一些可打印常用字符,表示一个字节(8位)中所有非打印字符方法!

Quoted-printable编码方法

任何一个8位的字节值可编码为3个字符:一个等号”=”后跟随两个十六进制数字(0–9或A–F)表示该字节的数值.例如,ASCII码换页符(十进制值为12)可以表示为”=0C”, 等号”=”(十进制值为61)必须表示为”=3D”. 除了可打印ASCII字符与换行符以外,所有字符必须表示为这种格式.

所有可打印ASCII字符(十进制值的范围为33到126)可用ASCII字符编码来直接表示, 但是等号”=”(十进制值为61)不可以这样直接表示.ASCII的水平制表符(tab)与空格符, 十进制为9和32, 如果不出现在行尾则可以用其ASCII字符编码直接表示。如果这两个字符出现在行尾,必须QP编码表示为”=09″ (tab)或”=20″ (space).

如果数据中包含有意义的行结束标志,必须转换为ASCII回车(CR)换行(LF)序列,既不能用原来的ASCII字符也不能用QP编码的”=”转义字符序列。 相反,如果字节值13与10有其它的不是行结束的含义,它们必须QP编码为=0D与=0A.

quoted-printable编码的数据的每行长度不能超过76个字符. 为满足此要求又不改变被编码文本,在QP编码结果的每行末尾加上软换行(soft line break). 即在每行末尾加上一个”=”, 但并不会出现在解码得到的文本中.

例如:If you believe that truth=beauty, then surely mathematics is the most beautiful branch of philosophy. 编码后结果是

If you believe that truth=3Dbeauty, then surely=20=
mathematics is the most beautiful branch of philosophy.

编码里面,有几个特定限定,一些可打印字符不用编码,当然如果你按照规范编码后,也一样可以显示的!因此自己简单自己实现该编码:


function quoted_printable_encode($string) {
 return preg_replace('/[^\r\n]{73}[^=\r\n]{2}/', "$0=\r\n", str_replace("%","=",
rawurlencode($string)));
}

一个函数就可以,将所有字符串urlencode转换后,%号替换为”=”号,然后对非\r\n超过73连续字符,后面加一个=\r\n。这个是简单实现方法! 按照该编码详细说明里面,有些空格、换行,还有一些特殊字符可以不用转换。不过一起转换了,也不会有影响!

很多时候,我们用些常见字符表示所有8位其它非打印字符,这种通过,Quoted-printable编码,只是对该字节转为16进制后,做简单增加前缀!然后做些特殊字符处理即可! 它的简单,及编码高效,也让该编码在邮件格式里面,得到了广泛使用!好了,就到这里,欢迎交流!

标签:Quoted-printable,编码
0
投稿

猜你喜欢

  • python能否java成为主流语言吗

    2022-10-16 18:34:11
  • mysql 8.0.22 zip压缩包版(免安装)下载、安装配置步骤详解

    2024-01-15 21:19:16
  • vant之van-list的使用及踩坑记录

    2023-07-02 16:48:41
  • mysql通配符的具体使用

    2024-01-22 18:43:16
  • Vue SPA 初次进入加载动画实现代码

    2023-07-02 16:56:25
  • Python字符串、列表、元组、字典、集合的补充实例详解

    2022-06-24 14:50:56
  • 为什么MySQL不建议使用SELECT *

    2024-01-26 21:29:44
  • Python实现设置显示屏分辨率

    2021-05-16 01:32:36
  • 浅谈Python中列表生成式和生成器的区别

    2023-03-21 11:50:39
  • MySQL系列之九 mysql查询缓存及索引

    2024-01-22 12:46:10
  • vue+vux实现移动端文件上传样式

    2024-05-02 16:34:40
  • Python利用Pydub实现自动分割音频

    2022-10-08 22:02:48
  • python自制简易mysql连接池的实现示例

    2023-04-14 20:23:55
  • 基于python实现微信收红包自动化测试脚本(测试用例)

    2022-01-03 11:38:34
  • 基于python实现的抓取腾讯视频所有电影的爬虫

    2023-02-20 22:01:39
  • 省市级联菜单的可用性

    2009-02-24 16:32:00
  • .Net行为型设计模式之模板方法模式(Template Method)

    2024-05-13 09:17:35
  • Div+CSS布局入门教程

    2007-09-13 12:52:00
  • Python3 sys.argv[ ]用法详解

    2021-08-03 00:16:29
  • 如何使用ASP来读写注册表

    2007-09-20 13:08:00
  • asp之家 网络编程 m.aspxhome.com