1


1

私はbase64でエンコードされた文字列を持っています(2つのドル記号があるので、それは一般的なbase64文字列ではありません)

問題:Base64.decode64(または.unpack( "m"))は私のローカルマシン(ruby 1.8.6)ではうまくデコードできますが、ruby 1.8.5(Herokuが使用しているバージョン)ではうまくいきません。

何か案は ?

編集:

私は持っています :

$$ YTo1OntzOjM6Im1pZCI7czo3OiI3MTE5Njg3IjtzOjQ6Im5hbWUiO3M6MjE6IkthbnllIFdlc3QgLSBTdHJvbmd lciI7czo0OiJsaW5rIjtzOjQ4OiJodHRwOi8vd3d3LmVhc3kxNS5jb20vMDIgU3Ryb25nZXIgKFNuaXBwZXQpMS5tcD MiO3M6OToiX3BsYXl0aW1lIjtzOjU6IjgzMjAwIjtzOjg6Il9uZXh0aWRzIjtzOjEzNDoiMjc1ODE0MDYsMjc0MDE1 NzAsMjI1MTU0MDMsMTU1ODM2NjYsMTYzMTUzMzksMjgwNDY5MTUsMzAzOTMxODksMzUyMDAyMTMsMjIwNTE1MzAsMj c1NTg1MTQsMTM3ODkyNTYsMTk4MTY5OTgsMzA0NzI4MDEsMTUyNTk5NzksMTg5OTkxMzciO30 =

私はそれを '…​'で解読することに成功しましたが、unrock( "m")をローカルではなくherokuサーバ上では解読できませんでした(ruby 1.8.5、たぶんそれは問題ではないでしょう)。

1 Answer


3


ドル記号はBase64仕様の一部ではありません。

解凍する前に、先頭の `$$`を削除するだけです。

str.sub(/^\$*/, '').unpack('m')

新しい(Ruby 1.8.6)動作をエミュレートして、Base64以外のすべての文字を削除するには、

_ str.gsub(/ [^ ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 \ + \ /] /、 '').unpack( 'm') _

Ruby 1.8.6はデコードする文字列内のBase64以外のすべてのシンボル( `$`を含む)を無視しますが、1.8.5はそのような最初の文字で処理を停止します(Rubyソースの `pack.c`参照)