【问题标题】:Mime encoded headers with extra '=' (==?utf-8?b?base64string?=)带有额外“=”的 Mime 编码标头 (==?utf-8?b?base64string?=)
【发布时间】:2013-06-10 05:53:44
【问题描述】:

这可能是一个愚蠢的问题,但是……就这样吧!

我用原生 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 :)

【问题讨论】:

    标签: parsing encoding character-encoding protocols mime


    【解决方案1】:

    从我在MIME RFC 中看到的内容来看,双等号不是有效输入(用于编码),但请记住,您可以将第一个等号解释为它是什么,然后使用以下内容进行解码。但严重的是,这些额外的等号看起来像是伪像,可能来自不正确的编码器。

    【讨论】:

    • 我也这么认为。我在来自不同来源的 5 封电子邮件中看到了它们,并认为这是我遗漏的东西。还有什么比 SO 更好的地方问):
    【解决方案2】:

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

    ...(为什么是 2 个?)

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

    RFC 2047:

    “编码字”的长度不得超过 75 个字符, 包括“字符集”、“编码”、“编码文本”和分隔符。 如果希望编码的文本多于一个 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 正文。

    【讨论】:

      【解决方案3】:

      它被称为“软换行符”,它是 SMTP 协议的遗产。

      引用RFC2045第20页

      (软换行符)Quoted-Printable 编码 要求编码行不超过 76 长字符。如果要编码更长的行 使用 Quoted-Printable 编码,“软”换行符 必须使用。等号作为 a 的最后一个字符 编码的行表示这样一个不重要的(“软”) 编码文本中的换行符。

      还有Wikipedia on Quoted-printable

      软换行符由编码行末尾的“=”组成, 并且不会在解码文本中显示为换行符。

      【讨论】:

      • 这个答案不正确。将“引用可打印”内容传输编码 (RFC 2045) 与“Q 编码”编码词 (RFC 2047) 混淆。上述主题应解码为“Oficina de Información, Iniciativas y Reclam=aciones”
      猜你喜欢
      • 2020-11-21
      • 2013-06-15
      • 2012-10-23
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多