RubyでバイナリデータをBase64エンコードする場合、
require 'base64'
をしてからBase64.enc
をするか、
以下のようにpack
のm
テンプレートを使うことができます。
1 [binary].pack('m') #=> Base64 encoded string
しかし、アップロードしたファイル用のテンポラリなファイル名 などに使用する場合、Base64でエンコードした文字列は ファイル名に使えない(可能性が高い)文字を含んでいるため、 そのような場合にはbase64url形式でエンコードします。
base64url とは、base64 を基に RFC4648 で規定された変換方式で、url とファイル名に使用しても安全になるように設計されています。変更点は、base64 では + と / が使用されていますが、それを - と _ を使用するようにします。具体的には、base64では「ABCDEFGHIJ
KLMNOPQRST UVWXYZabcd efghijklmn opqrstuvwx yz01234567 89+/」の表で変換しますが、base64url では「ABCDEFGHIJ KLMNOPQRST UVWXYZabcd efghijklmn opqrstuvwx yz01234567 89-_」を使用します。
ということで、通常のBase64エンコードした結果に対して、
+
を-
に、/
を_
に置き換えればいいだけなので、
以下のようにすればOKです。
1 [binary].pack('m').tr('+/', '-_')
posted by
genki
on Thu 24 Jan 2008
at 06:02