Ruby 中的 base64 编码字符串中的奇怪 \n

2023-12-27

Ruby 中内置的 Base64 库添加了一些 '\n'。我无法找出原因。对于这个特殊的例子:

irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'base64'
=> true
irb(main):003:0> str =  "1110--ad6ca0b06e1fbeb7e6518a0418a73a6e04a67054"
=> "1110--ad6ca0b06e1fbeb7e6518a0418a73a6e04a67054"
irb(main):004:0> Base64.encode64(str)
=> "MTExMC0tYWQ2Y2EwYjA2ZTFmYmViN2U2NTE4YTA0MThhNzNhNmUwNGE2NzA1\nNA==\n"

\n 位于倒数最后一个和第六个位置。解码器(Base64.decode64)完美返回旧字符串。奇怪的是,这些 \n 不会为编码字符串添加任何值。当我从输出字符串中删除换行符时,解码器会再次完美地对其进行解码。

irb(main):005:0> Base64.decode64(Base64.encode64(str).gsub("\n", '')) == str
=> true

更重要的是,我使用另一个 JS 库来生成相同输入字符串的 base64 编码输出,输出不带 \n。

这是一个错误还是其他什么?以前有人遇到过这个问题吗?

FYI,

$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]

Edit:自从我写了这个答案Base64.strict_encode64() https://docs.ruby-lang.org/en/3.0.0/Base64.html#method-i-strict_encode64添加了,这不会添加换行符。


The docs http://ruby-doc.org/stdlib/libdoc/base64/rdoc/classes/Base64.html有点令人困惑,b64encode方法应该为每 60 个字符添加一个换行符,示例为encode64方法实际上是使用b64encode method.

看来pack("m")使用的 Array 类的方法encode64还添加换行符。我认为这是一个设计错误,这不是可选的。

您可以自己删除换行符,或者如果您使用的是 Rails,则有ActiveSupport::CoreExtensions::Base64::编码 http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Base64/Encoding.htmlencode64s method.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby 中的 base64 编码字符串中的奇怪 \n 的相关文章

随机推荐