現在、Rubyの「base64」を使用していますが、作成される文字列には/+=などの特殊文字が含まれています。
これらを削除し、将来的にデコードが機能することを確認するにはどうすればよいですか?
基本的に、英数字を使用したいと思います。
何か新しいものを発明するのではなく、基本的に base64 で + と / を - と _ に置き換えたBase64.urlsafe_encode64
もの (およびその対応するもの) を使用します。Base64.urlsafe_decode64
これはRFC 4648に準拠しているため、広く理解できるはずです
英数字が必要な場合は、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"
これは、より低いベースを処理するように適合させることができますが、そのままで十分な場合があります。