gpt4 book ai didi

parsing - Mime 编码 header 带有额外的 '=' (==?utf-8?b?base64string?=)

转载 作者:行者123 更新时间:2023-12-02 18:24:18 36 4
gpt4 key购买 nike

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

我用 native C++ 编写了自己的 MIME 解析器。编码真是一场噩梦!在过去 3 个月左右的时间里它很稳定,但最近我注意到这个 Subject: header

Subject: =?UTF-8?B?T2ZpY2luYSBkZSBJbmZvcm1hY2nDs24sIEluaWNpYXRpdmFzIHkgUmVjbGFt?===?UTF-8?B?YWNpb25lcw==?=

应该解码为:

Subject: Oficina de Información, Iniciativas y Reclamaciones

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

==?UTF-8?B?blahblahlblah?=

我应该如何处理多余的=

我可以在做任何事情之前将 ==? 替换为 =? (我就是)(并且它有效)...但我想知道是否有任何与此相关的规范,这样我就不会侵入正确的功能。

PS:我多么讨厌这些遗物协议(protocol)!所有文本通信均应采用 UTF-8 和 XML :)

最佳答案

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

... (why 2?)

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

RFC 2047:

An 'encoded-word' may not be more than 75 characters long, including 'charset', 'encoding', 'encoded-text', and delimiters. If it is desirable to encode more text than will fit in an 'encoded-word' of 75 characters, multiple 'encoded-word's (separated by CRLF SPACE) may be used.

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

Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=
=?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=

您的主题应解码为:

"Oficina de Información, Iniciativas y Reclam=aciones"

mraq答案不正确。软换行符仅适用于“引用的可打印”内容传输编码,可在 MIME 正文中使用。

关于parsing - Mime 编码 header 带有额外的 '=' (==?utf-8?b?base64string?=),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17093964/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com