Mime编码标头带有'='(==?utf-8?b?base64string?=)

Cod*_*gry 6 encoding parsing mime protocols character-encoding

这可能是一个愚蠢的问题,但......在这里!

我在本机C++中编写了自己的MIME解析器.这是编码的噩梦!它在过去3个月左右稳定,但最近我注意到了这一点Subject: header.

Subject: =?UTF-8?B?T2ZpY2luYSBkZSBJbmZvcm1hY2nDs24sIEluaWNpYXRpdmFzIHkgUmVjbGFt?===?UTF-8?B?YWNpb25lcw==?=
Run Code Online (Sandbox Code Playgroud)

哪个应该解码到这个:

Subject: Oficina de Información, Iniciativas y Reclamaciones
Run Code Online (Sandbox Code Playgroud)

问题是有一个额外= (equal)的,我无法弄清楚绑定两个(为什么2?)编码元素,我不明白为什么分开.理论上,格式应该是:=?charset?encoding?encoded_string?=但是找到另一个以两个开头的主题=.

==?UTF-8?B?blahblahlblah?=
Run Code Online (Sandbox Code Playgroud)

我应该如何处理额外的=

我可以取代==?=? (其中我)做任何事情之前(和它的作品) ...但我不知道是否有任何关于这个,所以我不砍我的方式进入正常功能样的规格的.

PS:我多讨厌这些遗物协议!所有文本通信应该是UTF-8和XML :)

Paw*_*ski 2

在 MIME 标头中,使用编码字(RFC 2047 第 2 节)。

\n\n
\n

...(为什么是2?)

\n
\n\n

为了克服 75 个编码字数限制,这是由于 78 行长度限制而存在的(或者使用 2 种不同的编码,例如中文和波兰语)。

\n\n

RFC 2047:

\n\n
\n

“编码字”的长度不得超过 75 个字符,包括“字符集”、“编码”、“编码文本”和分隔符。\n 如果需要编码的文本多于 75 个字符的“编码字”,则可以使用多个“编码字”(用 CRLF 空格分隔)。

\n
\n\n

这是 RFC2047 中的示例(注意中间没有 \'=\'):

\n\n
Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=\n  =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=\n
Run Code Online (Sandbox Code Playgroud)\n\n

您的主题应解码为:

\n\n
"Oficina de Informaci\xc3\xb3n, Iniciativas y Reclam=aciones"\n
Run Code Online (Sandbox Code Playgroud)\n\n

mraq答案不正确。软换行符仅适用于“Quoted Printable”Content-Transfer-Encoding,可在 MIME 正文中使用。

\n