Tips: procmailrc规则中的中文处理
procmail有很方便的基于正则表达式的规则,非常强大。
处理英文字段自然OK,可是处理中文字段呢?直接打中文恐怕是肯定不可以了。比如分类Subject段包含“中国”的规则,如果写成:
* ^Subject.*中国
那就找不到了。因为procmail直接处理邮件文本,而邮件文本都是编码过的,Subject段是肯定不会直接出现“中国”字样。
一般邮件内容的编码常用的有两种,QuotedPrintable和Base64,下面分开说。
QuotePrintable
用文本编辑器直接打开mbox文件,在Subject段看到
=?utf-8?Q?Goowy=e9=82=ae=e4=bb=b6=e6=9c=8d=e5=8a=a1=e7=9a =84flash=e7=95=8c=e9=9d=a2_=5bFlickr=5d?=
这样都是=间隔的,就是QuotePrintable编码了,其中头部=?utf-8?Q?中的Q也指出了这儿用的是QuotePrintable编码,utf-8不用解释,就是文本是utf-8编码的。以上的Subject段解码后是:
Goowy邮件服务的flash界面_[Flickr]
对于QuotePrintable的Procmail规则就比较简单,直接根据关键字的编码,加入=号间隔就可以了。比如我们查找关键字“服务”,对应的utf-8序列是
0xe69c8d 0xe58aa1
,一般中文自的utf8编码都会是3个字节,那么对应的就是
=e6=9c=8d=e5=8a=a1
,规则可以这么写:
* ^Subject.*=e6=9c=8d=e5=8a=a1
对于GB系列编码也是一样,只是每个汉字就是两个字节,而不是三个了。
Base64
Base64的嘛,hoho,再研究研究~ 等下回吧~