让我们以这个主题行为例,
$ echo -n 台電用戶意見電子信箱-信件受 | base64
5Y+w6Zu755So5oi25oSP6KaL6Zu75a2Q5L+h566xLeS/oeS7tuWPlw==
它(连同“主题:”等)在编码时超出了限制。所以,一些邮寄者(某电力公司的)首先对其进行编码,然后将其拆分:
Subject: =?utf-8?B?5Y+w6Zu755So5oi25oSP6KaL6Zu75a2Q5L+h566xLeS/oeS7?=
=?utf-8?B?tuWPl+eQhumAmuefpQ==?=
(但这可能很容易“破坏”一个 UTF-8 多字节字符。)
其他邮件程序(例如 Gnus)首先将其拆分,然后对其进行编码:
Subject: =?utf-8?B?5Y+w6Zu755So5oi25oSP6KaL6Zu75a2Q5L+h566xLeS/oeS7tg==?=
=?utf-8?B?5Y+X55CG6YCa55+l?=
后者保证在今天的所有邮件阅读器中都能正确呈现。
我的问题是,某些邮件阅读器(例如,Gmail android 应用程序)被前者阻塞,谁的错?
邮件阅读器是否应该总是先将两个字符串粘贴在一起,然后再解码?(所以 Gmail 应用程序是错误的。)
还是先解码,然后将两个解码的字符串粘贴在一起也可以。(所以邮件程序是错的?)
(我认为 Quoted Printable 也会出现同样的问题,不仅仅是 Base64。)
事实上,如果你仔细想想,Saying=?utf-8?B?...?=
意味着...
东西应该是一个有效的 UTF-8 字符串,(就其本身而言)对吧?所以邮件程序是错误的!
同样,可能从来没有定义过如何拆分=?utf-8?B?...?=
成两个短语的语法,因为这应该事先处理好,因为创建=?utf-8?B?...?=
字符串应该始终是最后一步。
所以:Mailer 软件:有罪。Gmail:无罪。