• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >心得技巧 > MIME的编码介绍(由网上资料和实践经验整合)

MIME的编码介绍(由网上资料和实践经验整合)

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-08-06

本文主要包含Mime,编码等相关知识,佚名 希望在学习及工作中可以帮助到您

一、MIME: Multipurpose Internet Mail Extensions

英国帝国大学计算机在线字典FOLDOC对MIME的解释为:“多部分(multi-part)、多媒体电子邮件和WWW超文本的一种编码标准,用于传送诸如图形、声音和传真等非文本数据。MIME定义于RFC1341,用MIMENCODE的方法将二进制数据转换成为一种被称为BASE64的ASCII子集的字符的组合。”

Internet上有专门讨论MIME的新闻组: comp.mail.mime。该新闻组的FAQ可以从下面的网点获得:

http://www.cis.ohio-state.edu/hypertext/faq/usenet/mail/mime-faq/mime0/faq.html

MIMENCODE最早称为MMENCODE,提出用MIMENCODE代替UUENCODE,是因为UUENCODE使用了一些字符在一些邮件网关(特别是那些转换ASCII和EBCDIC码的网关)中造成传输障碍,(还有一些软件不能对所有 UUENCODE 的算法进行正确解码而导致邮件的阅读困难),因此 MIME 被设计用于替代UUENCODE,但是结果是这些协议共存。

在MIME出台之前,使用RFC 822只能发送基本的ASCII码文本信息,邮件内容如果要包括二进制文件、声音和动画等,实现起来非常困难。

   MIME提供了一种可以在邮件中附加多种不同编码文件的方法,弥补了原来的信息格式的不足。实际上不仅仅是邮件编码,现在MIME经成为HTTP协议标准的一个部分。

二、MIME编码方式简介

对邮件进行编码最初的原因是因为 Internet 上的很多网关不能正确传输8bit内码的字符,比如汉字等。编码的原理就是把8bit的内容转换成7bit的形式以能正确传输,在接收方收到之后,再将其还原成8bit的内容。

在MIME协议之前,邮件的编码曾经有过UUENCODE等编码方式 ,但是由于MIME协议算法简单,并且易于扩展,现在已经成为邮件编码方式的主流,不仅是用来传输8bit的字符,也可以用来传送二进制的文件,如邮件附件中的图像、音频等信息,而且扩展了很多基于MIME 的应用。从编码方式来说,MIME定义了两种编码方法Base64与QP(Quote-Printable)。

1.Base64编码

Base64是一种通用的方法,其原理很简单,就是把三个Byte的数据用4个Byte表示。在这四个Byte中,实际用到的都只有前面6bit,这样就不存在只能传输7bit的字符的问题了。Base64的缩写一般是“B”。

   Base64将输入的字符串或一段数据编码成只含有{'A'-'Z', 'a'-'z', '0'-'9', '+', '/'}这64个字符的串,'='用于填充。

   其编码的方法是,将输入数据流每次取6bit,用此6bit的值(0-63)作为索引去查表,输出相应字符。

这样,每3个字节将编码为4个字符(3×8 → 4×6);不满4个字符的以'='填充。

   有的场合,以“=?charset?B?xxxxxxxx?=”表示xxxxxxxx是Base64编码,且原文的字符集是charset。在段体内则直接编码,适当时机换行,MIME建议每行最多76个字符。

   Base64的算法很简单,它将字符流顺序放入一个24位的缓冲区,缺字符的地方补零。

   然后将缓冲区截断成为4个部分,高位在先,每个部分6位,用64个字符重新表示。如果输入只有一个或两个字节,那么输出将用等号“=”补足。这可以隔断附加的信息造成编码的混乱。

 

如何进行base64编码
   Base64 使用US-ASCII子集的65个字符, 每个字符用6位表示
   对于文本串,编码过程如下。例如"men":
   先转成US-ASCII值.

   "m"十进制 109
   "e"十进制 101
   "n"十进制 110
   二进制 :
   m 01101101
   e 01100101
   n 01101110

   三个8位连起来是24位
   011011010110010101101110

   然后分成4个6位
   011011 010110 010101 101110

   现在得到4个值,十进制为
   27 22 21 46

  对应的 Base64 字符是 : b W V u
  编码总是基于3个字符,从而产生4个Base64字符。

  如果只是2个字符的数据,使用特殊字符"="补齐Base64的4字。
  如,编码"me"
  01101101 01100101
  0110110101100101
  011011 010110 0101
  111111 (与,补足6位)
  011011 010110 010100
  b W U
  b W U = ("=" 补足4字符)
  于是 "bWU=" 就是"me"的Base64值.

  如果只是2个字符的数据,如编码 "m"
  01101101
  011011 01
  111111
  011011 010000
  b Q = =
于是 "bQ==" 就是"m"的Base64值.

 

2.QP编码

另一种方法是QP(Quote-Printable) 方法,通常缩写为“Q”方法,其原理是把一个8bit的字符用两个16进制数值表示,然后在前面加“=”。所以我们看到经过QP编码后的文件通常是这个样子:=B3=C2=BF=A1=C7=E5=A3= AC=C4=FA=BA=C3=A3=A1。

    Quoted -printable根据输入的字符串或字节范围进行编码,若是不需编码的字符,直接输出。若需要编码,则先输出'=',后面跟着以2个字符表示的十六进制字节值。有的场合,以“=?charset?Q?xxxxxxxx?=”表示xxxxxxxx是Quoted-printable编码,且原文的字符集是charset。在段体内则直接编码,适当时机换行,换行前额外输出一个'='。

三、MIME的头信息

邮件头

在邮件头中,有很多从RFC 822沿用的域名,MIME也增加了一些。常见的标准域名和含义如下:

域名 含义 添加者

   Received                     传输路径 各级邮件服务器

   Return-Path                  回复地址           目标邮件服务器

   Delivered-To                 发送地址           目标邮件服务器

   Reply-To                     回复地址 邮件的创建者

   From                         发件人地址 邮件的创建者

   To                           收件人地址       邮件的创建者

   Cc                           抄送地址           邮件的创建者

   Bcc                          暗送地址 邮件的创建者

   Date                         日期和时间 邮件的创建者

   Subject                      主题              邮件的创建者

   Message-ID                   消息ID            邮件的创建者

   MIME-Version                 MIME版本 邮件的创建者

   Content-Type                 内容的类型 邮件的创建者

   Content-Transfer-Encoding    内容的传输编码方式 邮件的创建者

非标准的、自定义域名都以X-开头,例如X-Mailer, X-MSMail-Priority等,通常在接收和发送邮件的是同一程序时才能理解它们的意义。

段头

在段头中,大致有如下一些域:

域名 含义

   Content-Type                     段体的类型

   Content-Transfer-Encoding        段体的传输编码方式

您可能想查找下面的文章:

  • The Complete List of MIME Types(比较完整的MIME类型一览表)
  • 什么是 MIME TYPE MIME-Types类型集合
  • MIME的编码介绍(由网上资料和实践经验整合)

相关文章

  • 2018-08-23小小的「置灰」功能背后,有这么多的细节知识!
  • 2018-08-23想紧跟流行风尚?这5种平面设计趋势了解一下
  • 2017-08-06用ps两分钟做个xhtml+css的网站首页
  • 2018-08-23写给设计师的AR入门指南!手把手教你制作酷炫三维立方体!
  • 2017-08-25solr安装使用
  • 2018-08-23超全面总结!有可以提升用户设计体验的方法?
  • 2018-08-23新手科普文!每个设计师都该懂的参考线完全手册
  • 2018-08-23写给设计师看的基础数据知识
  • 2017-08-06在iframe框架中打开页面的方法
  • 2018-08-23PS教程!教你绘制低多边形星空效果熊猫头像

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • 常用元素默认margin和padding值问题探讨
    • 未来最成功的公司是技术公司还是设计公司?
    • 实战经验!聊聊移动电商购物车的功能设计
    • 学会5WH产品需求分析方法,再也不用熬夜改稿了!(下)
    • 让移动端用户体验出类拔萃的5种技巧
    • 从这4个角度,做出情感化设计的产品
    • 页面中防止缓存的解决方法
    • Bootstrap3.0学习笔记之栅格系统案例
    • 经典好书!从零开始翻译《Design Systems》:设计系统
    • 竞品分析很重要,但很多人的方法不正确

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有