【发布时间】:2015-01-18 05:01:09
【问题描述】:
标题和正文的字符编码不同的电子邮件是否有效? 用例:在处理电子邮件时,我应该单独检查其标题的字符编码,还是检查它的正文就足够了? 有人可以指导我如何解决这个问题吗? 提前致谢!
【问题讨论】:
标题和正文的字符编码不同的电子邮件是否有效? 用例:在处理电子邮件时,我应该单独检查其标题的字符编码,还是检查它的正文就足够了? 有人可以指导我如何解决这个问题吗? 提前致谢!
【问题讨论】:
电子邮件标头应使用 ASCII 字符集,如果您希望标头字段具有不同的编码,则需要使用编码字语法:http://en.wikipedia.org/wiki/MIME#Encoded-Word
只有在传输它的邮件服务器启用了 8 位 mime 时,才能直接以不同的编码对电子邮件正文进行编码(现在每个邮件服务器都应该启用它,但不能保证),否则您需要在传输编码中对正文进行编码(quoted-printable or base64)
每种情况下的字符集都可以不同,也就是说,您可以将每个编码的单词放在不同的字符集中,将每个邮件部分编码成不同的字符集,甚至也可以使用不同的传输编码。
例如,您可以:
Subject: =?UTF-8?Q?Zg=C5=82oszenie?= //header value in UTF-8 encoded with quoted printable
和正文编码:
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: base64
WmG/87PmIEfqtmyxIEphvPE=
同一封邮件中不同的字符集,不同的传输编码,没问题。
根据经验,我可以告诉您,此类邮件非常普遍。更糟糕的是,您会收到一封电子邮件,其中在 Content-Type 标头中声明一个字符集,在 html 正文元标记中声明另一个字符集:
Content-Type: text/html; charset="iso-8859-2"
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charser=utf-8">
由您来猜测实际使用的字符集。可能是元标记中的那个。
什么都不做。期待一切。不要俘虏。这是斯巴达。
【讨论】: