我目前正在使用 Ruby 的 'base64' 但创建的字符串具有特殊字符,例如 /+= 。
如何删除这些并仍然确保我的解码在将来可以正常工作?
本质上,我希望使用字母数字。
我不会发明新的东西,而是使用Base64.urlsafe_encode64
(及其对应物Base64.urlsafe_decode64
),它基本上是 base64,带有 + 和 / 替换为 - 和 _。这符合 rfc 4648,因此应该可以广泛理解
如果你想要字母数字,我认为使用 base 36 会更好并且更实用。Ruby 内置了高达 36 位的编码/解码(26 个字母和 10 个数字)。
123456.to_s(36)
# => "qglj"
"qglj".to_i(36)
# => 123456
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"
这可以适用于处理较低的碱基,但它可能就足够了。