这可能是一个愚蠢的问题,但......就在这里!
我在本机C ++中编写了自己的MIME解析器。这是编码的噩梦!它在过去3个月左右稳定,但最近我注意到了Subject: header
。
Subject: =?UTF-8?B?T2ZpY2luYSBkZSBJbmZvcm1hY2nDs24sIEluaWNpYXRpdmFzIHkgUmVjbGFt?===?UTF-8?B?YWNpb25lcw==?=
应解码为:
Subject: Oficina de Información, Iniciativas y Reclamaciones
问题是在那里有一个额外的= (equal)
,我无法弄清楚绑定两个(为什么2?)编码的元素,我不明白为什么分开。从理论上讲,格式应为=?charset?encoding?encoded_string?=
,但找到另一个以两个=
开头的主题。
==?UTF-8?B?blahblahlblah?=
我应该如何处理额外的=
?
在执行任何操作之前,我可以用==?
(我是)替换=?
(并且有效) ...但是我我想知道是否有任何关于此的规范,所以我不会破解我正确的功能。
PS :我讨厌这些遗物协议多少钱!所有文本通信都应该是UTF-8和XML:)
答案 0 :(得分:2)
在MIME标头中使用编码字(RFC 2047第2节)。
......(为什么2?)
要克服75个编码的字数限制,因为78行长度限制(或者使用2种不同的编码,例如中文和波兰语)。
RFC 2047:
'编码字'长度不得超过75个字符, 包括'charset','encoding','encoded-text'和分隔符。 如果希望编码的文本多于适合的文本 75个字符的“编码字”,多个“编码字” (可以使用CRLF SPACE分隔)。
以下是RFC2047的示例(注意中间没有'='):
Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=
=?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=
您的主题应解码为:
"Oficina de Información, Iniciativas y Reclam=aciones"
mraq 回答不正确。软换行符仅适用于“Quoted Printable”Content-Transfer-Encoding,可以在MIME正文中使用。
答案 1 :(得分:0)
我在MIME RFC中看到的双等号不是有效输入(用于编码),但请记住,您可以将第一个等号解释为它是什么,然后使用以下内容进行解码。但严重的是,那些额外的等号看起来像是伪影,可能来自不正确的编码器。
答案 2 :(得分:0)
它被称为" Soft Line Break "它是SMTP协议的遗产。
引用RFC2045
的第20页(Soft Line Breaks)Quoted-Printable编码 要求编码行不超过76行 长字符。如果要编码更长的行 使用Quoted-Printable编码," soft"换行 必须使用。一个等号作为a的最后一个字符 编码行表示这种不重要的(" soft") 编码文本中的换行符。
还有Wikipedia on Quoted-printable
软换行包含" ="在编码行的末尾, 并且不会在解码文本中显示为换行符。