金笛邮件论坛  

返回   金笛邮件论坛 > 开发者乐园 > 电子邮件系统技术交流

回复
 
LinkBack 主题工具 显示模式
旧 2013-01-18, 12:45   #1 (permalink)
版主
 
注册日期: 2012-02-07
帖子: 281
默认 邮件乱码纠错

为了适应有些传统系统会把8bits首位过滤掉的问题,
邮件协议里专门添加了base64和quoted-printable两种编码方式,把多字节字符转换成7bits字符,
具体的概念以及编码规则本文就不说了。

按照rfc的规范, “简单email测试”这几个字会被转成
=?gb2312?B?vPKlpWVtYWlssuLKlA==?=
抽象的说,是以 "=?" 开头 , "?="结束,中间 两个问号夹着编码规则, Q表示quoted-printable , B 表示 base64 。 如果按照Q或B规则重新解码,邮件原字就能正确显示。

但是有些软件会有一个不同于rfc要求的处理,即在使用base64编码时对一个字符串进行分段处理。比如上面的“简单email测试”, 就会分成三段 “简单” “email" "测试”。
按照这样处理的编码就成了出来的
=?gb2312?B?vPKlpQ==?=email=?gb2312?B?suLKlA==?=
大家应该都能看出来,区别在于处理时对于天然就是7bits的字符,不作任何编码转换,保持原貌,其他的分段编码。

这样处理的目的,我感觉程序员是为了空间上的考虑,毕竟base64对字符编码时会产生1/3的空间浪费(3个字符变成4个字符),而其中如果出现7bits字符的话,base64转换其实都是不必要的。
自然,很多有和我会有同样的考虑,由于 ?=gb2312?B?......?= 这样一个格式会产生额外的开销,所以当字符串里出现短促7bits字符时,这种处理反倒浪费空间。

空间上的开销是本文额外话题,因为现在的邮件支持8bits的字符,所以,大胆在邮件编写时使用中文字(多字节字)就可以了,不必管那些原始的、只支持7bits的系统。 不过这样的处理又需要注意一点,字符本身不会告诉我们它到底是采用 gb字符还是utf8字符,所以不同字符环境(locale)下邮件内容可能无法正常显示。 这点rfc编码里面到是作了聪明的处理, 在 ?= 和第二个问号之间要求标明字符集。
chyb 当前离线   回复时引用此帖
回复

书签


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为北京时间。现在的时间是 16:31


Powered by vBulletin® 版本 3.8.3
版权所有 ©2000 - 2024,Jelsoft Enterprises Ltd.