如何使用Base64并从字符串中排除特殊字符+ / =?

时间:2013-01-09 16:06:24

标签: ruby base64

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

如何删除这些并仍然确保我的解码将来有效?

基本上我想要使用字母数字。

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

如果您需要字母数字,我认为使用base 36更好更实用.Ruby内置编码/解码,最多可达36(26个字母和10个数字)。

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

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

答案 2 :(得分: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"

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