我们在做接收邮件时,有些邮件的Content-Transfer-Encoding类型为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。这个是简单实现方法! 按照该编码详细说明里面,有些空格、换行,还有一些特殊字符可以不用转换。不过一起转换了,也不会有影响!

PHP中可以使用下面1对函数进行编码和解码:

quoted_printable_encode() 函数把 8 位字符串转换为 quoted-printable 字符串。

quoted_printable_decode() 对经过 quoted-printable 编码后的字符串进行解码,返回 8 位的 ASCII 字符串

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

Quoted-printable 编码认识、介绍、编码解码转换相关推荐

  1. JPG文件编解码详解——详细介绍编码和解码JPG

    http://blog.csdn.net/zhengzhoudaxue2/article/details/7693258 JPEG文件编/解码详解 cat_ng 猫猫 JPEG(Joint Photo ...

  2. 视频编解码——编码流程介绍

    为什么需要编码? 原始视频数据很庞大,比如一个150分钟,30FPS,分辨率为720✖480的彩色电影需要占用280GB.无论是物理存储还是网络传输,这都是难以负担的.所以需要编码进行压缩. 编码方式 ...

  3. Golomb及指数哥伦布编码原理介绍及实现

    2017年的第一篇博文. 本文主要有以下三部分内容: 介绍了Golomb编码,及其两个变种:Golomb-Rice和Exp-Golomb的基本原理 C++实现了一个简单的BitStream库,能够方便 ...

  4. 计算机编码详解_什么是计算机编码?计算机编码的起源与操作系统是如何解码的。

    目录 前言 编码是什么? 操作系统是如何绘制编码的 编码的起源 Unicode和Utf-8的区别 什么是抽象码?它与编码的区别 Utf-8与Utf-16 目前是谁在维护编码统一性? 宽字符与窄字符的区 ...

  5. ffmpeg 视频编码三(基于 libavfilter 转换视频)

    1. ffmpeg 视频解码一 2. ffmpeg 视频解码二 3. ffmpeg 音频解码一 4. ffmpeg 音频解码二 5. ffmpeg 音视频解码 6. ffmpeg 视频编码一 7. f ...

  6. H.264编码的介绍

    H.264编码的介绍 关键技术 1.帧内预测编码 帧内编码用来缩减图像的空间冗余.为了提高H.264帧内编码的效率,在给定帧中充分利用相邻宏块的空间相关性,相邻的宏块通常含有相似的属性.因此,在对一给 ...

  7. Go 学习笔记(20)— Go 操作 json 文件(编码生成 json、解码 json 为 map、解码 json 为 struct)

    1. Json 概述 Go 语言对于标准格式的编码和解码都有良好的支持,由标准库中的 encoding/json . encoding/xml . encoding/asn1 等包提供支持并且这类包都 ...

  8. Base64 JAVA后台编码与JS前台解码(解决中文乱码问题)

    中文通过Java后台进行Base64编码后传到前台,通过JS进行Base64解码时会出现中文乱码的问题,被这个问题也是困扰了几天,使用jquery.base64.js只能转码非中文字符,经过搜集各种方 ...

  9. 什么是编码?什么是解码?

    将字符序列转换为字节序列的过程称为编码. 将字节序列转换为字符序列的过程称为解码. NETFramework提供了编码.解码的类有:Encoding.Encoder.Decoder. Encoding ...

  10. MPEG4视频编码技术介绍

    MPEG全称是Moving Pictures Experts Group,它是"动态图象专家组"的英文缩写,该专家组成立于1988年,致力于运动图像及其伴音的压缩编码标准化工作,原 ...

最新文章

  1. git拉取分支报错:fatal:‘XXX' is not a commit and a branch ‘XXX' cannot be created from
  2. 使用拼凑URL的方法,实现DotNetNuke在新窗口中打开内容(三)
  3. UI设计灵感|时尚简约风格网页页面设计
  4. 总觉得该分享点什么!零基础小白如何快速入门前端?
  5. 共享GPU来了!投身去中心化机器学习,比挖矿多赚3倍
  6. java private list_Java基础知识回顾之四 ----- 集合List、Map和Set
  7. ComponentOne Ultimate 2012 v2 新特性
  8. mysql 字符串搜_Mysql搜索字符串
  9. SQL操作结果集-并集,差集,交集,结果集排序
  10. 【转载】C# 开源库大全非常好
  11. 怎样使用计算机操作,鼠标操作怎么用?电脑鼠标操作图文教程
  12. 内积、外积、元素积、克罗内克积的区分及用法【python】
  13. Oracle数据库,建库建表
  14. 【半导体先进工艺制程技术系列】FinFET工艺流程
  15. 机械加工工艺装备基本术语
  16. 计算机辅助翻译翻译技术的译前应用,计算机辅助翻译技术在网络字幕组中的应用...
  17. 十多位IT专家分享他们离不开的实用工具 1
  18. 解决RTL8168网卡在ubuntu上网慢的问题
  19. 《白话大数据与机器学习》读书笔记2
  20. 数据可视化:部分整体类可视化图表大全

热门文章

  1. 115、闪点、燃点、自然点的概念
  2. 花与剑尚未获取服务器信息,花与剑澄心无忆攻略,触发条件及完成方式介绍
  3. Your IP address is spelled incorrectly问题排查
  4. 中关村物联网联盟启动10x10计划 解决物联网产业内冷外热发展难题
  5. 【kindle笔记】之 《犬夜叉》-2017-12-26
  6. Unreal Engine 4 渲染目标(Render Target)教程 之 使用渲染目标绘制(下)
  7. 已解决【Watch检查软件更新失败,因为你尚未接入互联网。】
  8. SDNU-1014 页码问题
  9. Godot Shader:读屏着色器
  10. ! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses