1

我目前正在使用 Ruby 的 'base64' 但创建的字符串具有特殊字符,例如 /+= 。

如何删除这些并仍然确保我的解码在将来可以正常工作?

本质上,我希望使用字母数字。

4

3 回答 3

5

我不会发明新的东西,而是使用Base64.urlsafe_encode64(及其对应物Base64.urlsafe_decode64),它基本上是 base64,带有 + 和 / 替换为 - 和 _。这符合 rfc 4648,因此应该可以广泛理解

于 2013-01-09T18:29:29.447 回答
2

如果你想要字母数字,我认为使用 base 36 会更好并且更实用。Ruby 内置了高达 36 位的编码/解码(26 个字母和 10 个数字)。

123456.to_s(36)
# => "qglj"

"qglj".to_i(36)
# => 123456
于 2013-01-09T16:11:41.823 回答
0
class Integer
  Base62_digits = [*("0".."9"), *("a".."z"), *("A".."Z")]

  def base_62
    return "0" if zero?
    sign = self < 0 ? "-" : ""
    n, res = self.abs, ""
    while n > 0
      n, units = n.divmod(62)
      res = Base62_digits[units] + res
    end
    sign + res
  end

end

p 124.base_62 # => "20"

这可以适用于处理较低的碱基,但它可能就足够了。

于 2013-01-09T17:11:08.633 回答