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进制后,做简单增加前缀!然后做些特殊字符处理即可! 它的简单,及编码高效,也让该编码在邮件格式里面,得到了广泛使用!好了,就到这里,欢迎交流!

(0)

相关推荐

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

    Quoted-printable 可译为"可打印字符引用编码"."使用可打印字符的编码",我们收邮件,查看信件原始信息,经常会看到这种类型的编码! 最多时候,我们在邮件头里面能够看到这样的编码!Content-Transfer-Encoding:quoted-printable 它是多用途互联网邮件扩展(MIME) 一种实现方式.其中MIME是一个互联网标准,它扩展了电子邮件标准,致力于使其能够支持非ASCII字符.二进制格式附件等多种格式的邮件消息.目前http协

  • UUencode 编码,UU编码介绍、UUencode编码转换原理与算法

    UUencode编码起先用在unix网络中,先是Unix系统下将二进制的资料借由uucp邮件系统传输的一个编码程式,也是一种二进制到文字的编码.不属于MIME编码中一员.它也是定义了用可打印字符表示二进制文字一种方法,并不是一种新的编码集合.主要解决,二进制字符在传输.存储中问题.它早期在电子邮件中使用较多,最近这些年来基本上被MIME 中Base64所取代了.E-mail中一般采用UU.MIME.BINHEX三种编码标准! 我想,了解下这种编码将二进制字符转换为可打印字符实现思路!对我们以后做

  • Base64 编码介绍、Base64编码转换原理与算法

    Base64编码,是我们程序开发中经常使用到的编码方法.它是一种基于用64个可打印字符来表示二进制数据的表示方法.它通常用作存储.传输一些二进制数据编码方法!也是MIME(多用途互联网邮件扩展,主要用作电子邮件标准)中一种可打印字符表示二进制数据的常见编码方法!它其实只是定义用可打印字符传输内容一种方法,并不会产生新的字符集!有时候,我们学习转换的思路后,我们其实也可以结合自己的实际需要,构造一些自己接口定义编码方式.好了,我们一起看看,它的转换思路吧! Base64实现转换原理 它是用64个可

  • XXencode 编码,XX编码介绍、XXencode编码转换原理与算法

    Xxencode编码,也是一个二进制字符转换为普通打印字符方法.跟UUencode编码原理方法很相似,唯独不同的是可打印字符不同.通个UUencode编码,我们知道它有个缺点就是,64个可打印字符中,有很多的特殊字符.而XXencode编码方法,对64个原字符有做规范.这里它有跟Base64类型了.都有指定可打印字符范围.及编号.Xxencode编码在上世纪后期,IBM大型机中得到很广泛的应用.现在逐渐被Base64编码转换方法所取代了. Xxencode编码原理 XXencode将输入文本以每

  • Python新建项目自动添加介绍和utf-8编码的方法

    你是不是觉得每次新建项目都要写一次# coding:utf-8,感觉特烦人 呐!懒(fu)人(li)教程来啦,先看效果图吧 中文版 如图进入设置 然后将下列内容粘贴进去就行了,是不是很简单 """ -*- coding:utf-8 -*- Author:${USER} Age:24 Call:199**9**9*9 Email:nsq88@vip.qq.com Time: ${DATE} ${TIHE} Software: ${PRODUCT_NAME} "&quo

  • Python编码规范摆脱Python编码噩梦

    目录 1. Python 3 中 str 与 bytes 2. Python 2 中 str 与 unicode 3. 如何检测对象的编码 4. 编码与解码的区别 5. 如何设置文件编码 博客原文:http://python.iswbm.com/en/latest/c01/c01_44.html Github:https://github.com/iswbm/PythonCodingTime Python 中编码问题,一直是很多 Python 开发者的噩梦,尽管你是工作多年的 Python 开发

  • 可以把编码转换成 gb2312编码lib.UTF8toGB2312.js

    //Author: Unknow //把编码转换成 gb2312编码  function UrlEncode(str)  {  var i, c, ret="", strSpecial="!\"#$%&'()*+,/:;<=>?@[\]^`{|}~%";  for(i = 0; i < str.length; i++)  {  //alert(str.charCodeAt(i)); c = str.charAt(i);  if(c

  • 用Javascript实现UTF8编码转换成gb2312编码

    复制代码 代码如下: //把编码转换成 gb2312编码  function UrlEncode(str)  {  var i, c, ret="", strSpecial="!\"#$%&'()*+,/:;<=>?@[\]^`{|}~%";  for(i = 0; i < str.length; i++)  {  //alert(str.charCodeAt(i)); c = str.charAt(i);  if(c==&quo

  • php自动识别文字编码并转换为目标编码的方法

    本文实例讲述了php自动识别文字编码并转换为目标编码的方法.分享给大家供大家参考.具体如下: 在PHP处理页面的时候,我们对于字符集的转换都是采用了iconv或者mb_convert等函数,但,这其实是有一个前提的.即我们事先得知道in和out是什么样的编码,我们才能进行正确的转换. 虽然大多数转换都是在gbk和utf-8之间转,但如果不知道转换对象的编码怎么办呢?谷歌出来这么一个函数safeEncoding,可以简单的识别UTF8和GBK的编码.这个函数在一定程度上识别的很准确,但是在一些比较

  • iOS 原生地图地理编码与反地理编码(详解)

    当我们要在App实现功能:输入地名,编码为经纬度,实现导航功能. 那么,我需要用到原生地图中的地理编码功能,而在Core Location中主要包含了定位.地理编码(包括反编码)功能. 在文件中导入 #import <CoreLocation/CoreLocation.h> 地理编码: /** 地理编码 */ - (void)geocoder { CLGeocoder *geocoder=[[CLGeocoder alloc]init]; NSString *addressStr = @&qu

随机推荐