1

base64 でエンコードされた文字列があります (ドル記号が 2 つあるため、一般的な base64 文字列ではありません)

問題: Base64.decode64 (または .unpack("m")) は私のローカル マシン (ruby 1.8.6) では正常にデコードされますが、ruby 1.8.5 (Heroku で使用されるバージョン) では機能しません。

何か案は ?

編集:

私は持っている :

$$YTo1OntzOjM6Im1pZCI7czo3OiI3MTE5Njg3IjtzOjQ6Im5hbWUiO3M6MjE6IkthbnllIFdlc3QgLSBTdHJvbmd lciI7czo0OiJsaW5rIjtzOjQ4OiJodHRwOi8vd3d3LmVhc3kxNS5jb20vMDIgU3Ryb25nZXIgKFNuaXBwZXQpMS5tcD MiO3M6OToiX3BsYXl0aW1lIjtzOjU6IjgzMjAwIjtzOjg6Il9uZXh0aWRzIjtzOjEzNDoiMjc1ODE0MDYsMjc0MDE1 NzAsMjI1MTU0MDMsMTU1ODM2NjYsMTYzMTUzMzksMjgwNDY5MTUsMzAzOTMxODksMzUyMDAyMTMsMjIwNTE1MzAsMj c1NTg1MTQsMTM3ODkyNTYsMTk4MTY5OTgsMzA0NzI4MDEsMTUyNTk5NzksMTg5OTkxMzciO30=

ローカルでは '...'.unpack("m") でデコードに成功しましたが、heroku サーバーでは成功しませんでした (ruby 1.8.5、おそらく問題ではない ruby​​ バージョン)。

4

1 に答える 1

3

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

$$開梱する前に先頭を削除するだけです。

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

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

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

Ruby 1.8.6 はデコードする文字列内のすべての非 Base64 記号 (を含む$) を無視しますが、1.8.5 は最初のそのような文字で処理を停止します ( pack.cRuby ソースを参照してください)。

于 2009-02-28T17:57:18.357 に答える