gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:17:03 24 4
gpt4 key购买 nike

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 位于从末尾算起的最后一个和第 6 个位置。解码器 (Base64.decode64) 完美返回旧字符串。奇怪的是,这些\n 不会向编码字符串添加任何值。当我从输出字符串中删除换行符时,解码器再次完美解码。

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

更多的是,我使用了另一个 JS 库来生成相同输入字符串的 base64 编码输出,输出没有\n。

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

仅供引用,

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

最佳答案

编辑:因为我写了这个答案 Base64.strict_encode64()已添加,不添加换行符。


The docs有点令人困惑,b64encode 方法应该为每 60 个字符添加一个换行符,而 encode64 方法的示例实际上是使用 b64encode 方法。

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

您可以自己删除换行符,或者如果您使用的是 Rails,则有 ActiveSupport::CoreExtensions::Base64::Encoding使用 encode64s 方法。

关于ruby - Ruby 中 base64 编码字符串中的奇怪\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2620975/

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