ORF反垃圾邮件系统

邮件服务器-邮件系统-邮件技术论坛(BBS)

 找回密码
 会员注册
查看: 7293|回复: 2
打印 上一主题 下一主题

[经验] 邮件乱码纠错

[复制链接]
跳转到指定楼层
顶楼
发表于 2006-11-6 10:16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为了适应有些传统系统会把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编码里面到是作了聪明的处理, 在 ?= 和第二个问号之间要求标明字符集。

关于字符集问题,其他文章里再说。  回到本文题目里说的纠错,我的一个建议是:
如果看到邮件字符串只正常显示一个部分,可能就是因为没有对上面的编码串作“宽”处理。
庆幸的是,outlook,foxmail,thunderbird都有这些。我是在使用evolution的时候遇到的这个问题,不过最后还是解决了 :)
沙发
发表于 2006-11-7 16:23:00 | 只看该作者

还有需要注意的是:subject有些情况下是会换行的,这样会出现“半”个汉字的现象

藤椅
发表于 2006-11-25 19:00:25 | 只看该作者
这个是很正常的编码问题,如果你的邮件在处理过程中出现了corruption,那就会造成这个问题
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

小黑屋|手机版|Archiver|邮件技术资讯网

GMT+8, 2024-5-14 15:18

Powered by Discuz! X3.2

© 2001-2016 Comsenz Inc.

本论坛为非盈利中立机构,所有言论属发表者个人意见,不代表本论坛立场。内容所涉及版权和法律相关事宜请参考各自所有者的条款。
如认定侵犯了您权利,请联系我们。本论坛原创内容请联系后再行转载并务必保留我站信息。此声明修改不另行通知,保留最终解释权。
*本论坛会员专属QQ群:邮件技术资讯网会员QQ群
*本论坛会员备用QQ群:邮件技术资讯网备用群

快速回复 返回顶部 返回列表