我正在使用第三方集成,这需要将我的有效负载编码为base64格式。我用Rails来做这个
Base64.encode64("No way") # output: "Tm8gd2F5n"
与我合作过的大多数第三方对此没有任何问题,但也有少数人在使用\n解码编码值时遇到问题。面对这个问题后,我发现了另一个版本的base64编码,称为strict_encode64
Base64.strict_encode64("No way") # output: "Tm8gd2F5"
这解决了问题。
我想知道为什么将\n添加到编码字符串中。
encode64
在引擎盖下使用Array#pack。它使用了"m"指令,根据文档,该指令有一个相当模糊的注释"m";如果计数为0,则不添加换行,参见RFC 4648〃;。如果计数>0,然后添加新行。我看过RFC 4648,找不到任何关于它的内容,但我猜它一定在某个地方。
如果这些都没有帮助,我很抱歉。在这上面掉进了兔子洞,但也许里面有一些有用的碎屑。
Edit:Python似乎也这样做,而且似乎是经过深思熟虑的(在他们的单元测试中指定(。所以这看起来更像是与RFC 4648(或者可能是RFC 2045(有关,但我一生都找不到任何一个RFC中提到它。