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 :)
在 MIME 标头中,使用编码字(RFC 2047 第 2 节)。
\n\n\n\n\n...(为什么是2?)
\n
为了克服 75 个编码字数限制,这是由于 78 行长度限制而存在的(或者使用 2 种不同的编码,例如中文和波兰语)。
\n\nRFC 2047:
\n\n\n\n\n“编码字”的长度不得超过 75 个字符,包括“字符集”、“编码”、“编码文本”和分隔符。\n 如果需要编码的文本多于 75 个字符的“编码字”,则可以使用多个“编码字”(用 CRLF 空格分隔)。
\n
这是 RFC2047 中的示例(注意中间没有 \'=\'):
\n\nSubject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=\n =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=\nRun Code Online (Sandbox Code Playgroud)\n\n您的主题应解码为:
\n\n"Oficina de Informaci\xc3\xb3n, Iniciativas y Reclam=aciones"\nRun Code Online (Sandbox Code Playgroud)\n\nmraq答案不正确。软换行符仅适用于“Quoted Printable”Content-Transfer-Encoding,可在 MIME 正文中使用。
\n