一、为什么要编码?
在Internet里,E-mail的传送是只能传送US-ASCII格式的文字讯息,ASCII是7位的,而非ASCII格式的档案,在传送过程中若不先经过编码,先编成7位再传送,则在传送过程中会因为这7位元的限制而遭到拆解,拆解之后只会让收信方看到一堆乱七八糟不知所云的东西。经过编码后的资料,在传送过程中才可顺利传送,不会有“被截掉一个bit”的危险,但是收信方必须具有解码程序,将这份经过编码的东西还原,才能解读“天书”,看到寄信人要传送的真实信息。
二、MIME/BASE64编码:
BASE64编码是用的最多的邮件编码格式,具体如下:
base64和quoted-printable都属于mime(多部分( multi-part)、多媒体和 www 超文本的一种编码标准,用于传送诸如图形、声音和传真等非文本数据)。mime定义在rfc1341中。
base64是现今在互联网上应用最多的一种编码,几乎所有的软件头把它作为默认的二进制编码,它已经成了现今编码的代名词。
在Internet里,E-mail的传送是只能传送US-ASCII格式的文字讯息,ASCII是7位的,而非ASCII格式的档案,在传送过程中若不先经过编码,先编成7位再传送,则在传送过程中会因为这7位元的限制而遭到拆解,拆解之后只会让收信方看到一堆乱七八糟不知所云的东西。经过编码后的资料,在传送过程中才可顺利传送,不会有“被截掉一个bit”的危险,但是收信方必须具有解码程序,将这份经过编码的东西还原,才能解读“天书”,看到寄信人要传送的真实信息。
二、MIME/BASE64编码:
BASE64编码是用的最多的邮件编码格式,具体如下:
base64和quoted-printable都属于mime(多部分( multi-part)、多媒体和 www 超文本的一种编码标准,用于传送诸如图形、声音和传真等非文本数据)。mime定义在rfc1341中。
base64是现今在互联网上应用最多的一种编码,几乎所有的软件头把它作为默认的二进制编码,它已经成了现今编码的代名词。
下面是base64的一个例子,从例子中,您也可以看到base64与的的紧密联系:
content-type: text/plain;charset="cn-gb"
content-transfer-encoding: base64
cqkjicagikg2wtlc68vjt6i088irobcncgnx99xfom1vz2fvo6yw19tgu8a619w+o6h0zwxuzxq6
ly8ymdiumteyljiwljezmjoym6ops8nusagjdqojicagicagxkq438jtvp65pnf3ytkjumh0dha6
ly9tb2dhby5izw50axvulm5lda0kcqkjrw1hawx0bzptb2dhb0aznzeubmv0dqojicagkioqkioq
kioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqicagicagicagicagicagdqoj
icagkicz/chlvmfs5mqyw7s2vlk7tpjx36oss/3by9fjvkpksso0tryyu8h0z8iqdqojicagkioq
kioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioq
base64的算法很简单:它将字符流顺序放入一个 24 位的缓冲区,缺字符的地方补零。然后将缓冲区截断成为 4 个部分,高位在先,每个部分 6 位(6位二进制数可表示0~63),用下面的64个字符重新表示(0就是a,1就是b...):“abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/”。如果
content-type: text/plain;charset="cn-gb"
content-transfer-encoding: base64
cqkjicagikg2wtlc68vjt6i088irobcncgnx99xfom1vz2fvo6yw19tgu8a619w+o6h0zwxuzxq6
ly8ymdiumteyljiwljezmjoym6ops8nusagjdqojicagicagxkq438jtvp65pnf3ytkjumh0dha6
ly9tb2dhby5izw50axvulm5lda0kcqkjrw1hawx0bzptb2dhb0aznzeubmv0dqojicagkioqkioq
kioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqicagicagicagicagicagdqoj
icagkicz/chlvmfs5mqyw7s2vlk7tpjx36oss/3by9fjvkpksso0tryyu8h0z8iqdqojicagkioq
kioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioq
base64的算法很简单:它将字符流顺序放入一个 24 位的缓冲区,缺字符的地方补零。然后将缓冲区截断成为 4 个部分,高位在先,每个部分 6 位(6位二进制数可表示0~63),用下面的64个字符重新表示(0就是a,1就是b...):“abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/”。如果
输入只有一个或两个字节,那么输出将用等号“=”补足。这可以隔断附加的信息造成编码的混乱。它每行一般为76个字符。
三、其他编码方式介绍:
1、QP编码:
quoted-printable简称qp, 一般用在email系统中。它通常用于少量文本方式的8位字符的编码,例如foxmail就用它做对主题和信体的编码。这种编码的应该是很好辨认的:它有大量的“=”。下面是它的一个例子:
mime-version: 1.0
content-transfer-encoding: quoted-printable
=a1=b6=c2=d2=c2=eb=cb=e3=b7=a8=b4=f3=c8=ab=a1=b7
=d7=f7=d5=df:xxxx=a3=ac=b0=d7=d4=c6=bb=c6=ba=d7=d5=be=a3=a8telnet://61.129.63.131:23=a3=a9
三、其他编码方式介绍:
1、QP编码:
quoted-printable简称qp, 一般用在email系统中。它通常用于少量文本方式的8位字符的编码,例如foxmail就用它做对主题和信体的编码。这种编码的应该是很好辨认的:它有大量的“=”。下面是它的一个例子:
mime-version: 1.0
content-transfer-encoding: quoted-printable
=a1=b6=c2=d2=c2=eb=cb=e3=b7=a8=b4=f3=c8=ab=a1=b7
=d7=f7=d5=df:xxxx=a3=ac=b0=d7=d4=c6=bb=c6=ba=d7=d5=be=a3=a8telnet://61.129.63.131:23=a3=a9
=b3=c9=d4=b1=a1=a3
=c4=aa=b8=df=c8=ed=bc=fe=b9=a4=d7=f7=ca=d2=a3=badocs.xuehu
emailto:yin_jie@163
*********************************************
* =b3=fd=c1=cb=bc=c7=d2=e4=ca=b2=c3=b4=b6=bc=b2=bb=b4=f8=d7=df=a3=ac=b3=fd=c1=cb=d7=e3=bc=a3=ca
emailto:yin_jie@163
*********************************************
* =b3=fd=c1=cb=bc=c7=d2=e4=ca=b2=c3=b4=b6=bc=b2=bb=b4=f8=d7=df=a3=ac=b3=fd=c1=cb=d7=e3=bc=a3=ca
=b2=c3=b4=b6=bc=b2=bb=c1=f4=cf=c2*
*********************************************
qp的算法可以说是最简单的也可以说是编码效率最低的(它的编码率是1:3),它是专门为了处理8位字符制定的。它的算法是:读一个字符,如果ascii码大于127的格式,即字符的第8位是1的话,进行编码,否则忽略(有时也对7位字符编码)。
2. unicode
unicode应用中最典型的例子是:ie4以上版本对html的编码。它可以说是未来windows下唯一的字符集。但它还很不完善,而且win95和win98对它的支持还很有限,甚至它还没有
*********************************************
qp的算法可以说是最简单的也可以说是编码效率最低的(它的编码率是1:3),它是专门为了处理8位字符制定的。它的算法是:读一个字符,如果ascii码大于127的格式,即字符的第8位是1的话,进行编码,否则忽略(有时也对7位字符编码)。
2. unicode
unicode应用中最典型的例子是:ie4以上版本对html的编码。它可以说是未来windows下唯一的字符集。但它还很不完善,而且win95和win98对它的支持还很有限,甚至它还没有
一套完整的标准。不过,微软最新推出的office2000和马上就要推出的windows2000将全面支持unicode。unicode取代其他编码将会是必然的趋势。不过,在近一两年unicode并不会占主导地位,就是在占主导地位后,因为操作系统的差异,其他编码也不会立即消亡。它的中文资料可以在office2000和windows2000所带的文档中到,它的是:/。
3. binhex
binhex 编码是 macintosh 计算机(也就是俗称的“苹果电脑”)上用可打印字符表示/传输二进制文件的一种编码方法。它的主要用途是在程序中attach二进制文件。大部分的程序不支持这种格式(eudora支持),但用winzip可以进行解码。它的资料请查阅macintosh计算机带的相关文档。
4.uuencode
uuencode 是将二进制文件以文本文件方式进行编码表示、以利于基于文本传输环境中进行二进制文件的传输/交换的编码方法之一, 在邮件系统/二进制新闻组中使用频率比较
3. binhex
binhex 编码是 macintosh 计算机(也就是俗称的“苹果电脑”)上用可打印字符表示/传输二进制文件的一种编码方法。它的主要用途是在程序中attach二进制文件。大部分的程序不支持这种格式(eudora支持),但用winzip可以进行解码。它的资料请查阅macintosh计算机带的相关文档。
4.uuencode
uuencode 是将二进制文件以文本文件方式进行编码表示、以利于基于文本传输环境中进行二进制文件的传输/交换的编码方法之一, 在邮件系统/二进制新闻组中使用频率比较
高,经常用于 attach 二进制文件。
这种编码的特征是:每一行开头用“m”标志
uuencode的算法很简单,编码时它将3个字符顺序放入一个 24 位的缓冲区,缺字符的地方补零,然后将缓冲区截断成为 4 个部分,高位在先,每个部分 6 位,用下面的64个字符重新表示:
"`!"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_"
在文件的开头有“begin xxx 被编码的文件名”,在文件的结尾有“end”,用来标志uue文件的开始和结束。编码时,每次读取源文件的45个字符,不足45个的用“null”补足为3的整数倍(如:23补为24),然后输入目标文件一个ascii为:“32+实际读取的字符数”的字符作为每一行的开始。读取的字符编码后输入目标文件,再输入一个“换行符”。如果源文件被编码完了,那么输入“`(ascii为96)”和一个“换行符”表示编码结束。
解码时它将4个字符分别转换为4个6位字符后,截取有用的后六位放入一个 24 位的缓冲区,即得3个二进制代码。
四、其他:
这种编码的特征是:每一行开头用“m”标志
uuencode的算法很简单,编码时它将3个字符顺序放入一个 24 位的缓冲区,缺字符的地方补零,然后将缓冲区截断成为 4 个部分,高位在先,每个部分 6 位,用下面的64个字符重新表示:
"`!"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_"
在文件的开头有“begin xxx 被编码的文件名”,在文件的结尾有“end”,用来标志uue文件的开始和结束。编码时,每次读取源文件的45个字符,不足45个的用“null”补足为3的整数倍(如:23补为24),然后输入目标文件一个ascii为:“32+实际读取的字符数”的字符作为每一行的开始。读取的字符编码后输入目标文件,再输入一个“换行符”。如果源文件被编码完了,那么输入“`(ascii为96)”和一个“换行符”表示编码结束。
解码时它将4个字符分别转换为4个6位字符后,截取有用的后六位放入一个 24 位的缓冲区,即得3个二进制代码。
四、其他:
1、由于邮件编/解码要消耗大量的CUP资源,所以邮件中不适合附加太大的附件程序,否则在阅读邮件和发送邮件时会导致资源消耗太多而死机。
2、由于邮件编码可能会增加容量,加上邮件头,所以实际邮件的大小比附加的附件加上邮件文本内容的大小和要大的多
2、由于邮件编码可能会增加容量,加上邮件头,所以实际邮件的大小比附加的附件加上邮件文本内容的大小和要大的多
发布评论