看了一圈base64编码器后,我又回到了rfc,经过一番重新思考,我认为base64编码器不需要折叠线。
当它谈到数据的 base64 编码时,它提到了折叠:
2.4.1 BINARY
[...]Long lines of encoded binary data SHOULD BE folded to 75 characters
using the folding method defined in [MIME-DIR]
然后在 2.6 中再次提到折叠
2.6 Line Delimiting and Folding
[...] After generating a content line,
lines longer than 75 characters SHOULD be folded according to the
folding procedure described in [MIME DIR].
内容行定义为
contentline = [group "."] name *(";" param ) ":" value CRLF
(重要的是它是“全线”而不仅仅是折叠的值)
在查看 2.4.1 时,它暗示二进制编码应该折叠行,但这似乎与内容行折叠本身(2.6)竞争。
如果同时应用了二进制数据折叠和行折叠,那么会发生“双重折叠” ,我认为这不是有意的。(因为我知道有些人会提到这些例子不是 75 个字符长.. 假装它们是 .. 谢谢)即
PHOTO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQY <= line folded
MIICajCCAdOgAwI <=folded at 75 binary chars as per binary folding
kU6NuaJR+E9lJd8ux9JpuV8QS+w3wNThZJ9Tb2HNBr1B+GNO9fi75e <= line folded
[...]
更合理的解释是预期的输出是:
PHOTO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQY <=folded as per line folding
MIICajCCAdOgAwIkU6NuaJR+E9lJd8ux9JpuV8QS+w3wNThZJ9Tb2H <=folded as per line folding
NBr1B+GNO9fi75e[...]
我相信 2.4.1 基本上只是重申了 2.6 的文件夹要求,如果正确则意味着不需要 75 行的 base64 编码器,因为 vcard 本身的基本行折叠将达到预期的结果。
因此,除非被证明是错误的,否则我现在将采用这种解释。