base64 decodificar com sinal de dólar em Ruby 1.8.5
Pergunta
Eu tenho seqüência de Base64 (com dois cifrões, por isso não é uma string base64 comum)
O problema: Base64.decode64 (ou .unpack ( "m")) decodifica-lo muito bem em minha máquina local (ruby 1.8.6), mas com Ruby 1.8.5 (a versão utilizada pelo Heroku) ele doesn' t trabalho
Todas as idéias?
Editar:
Eu tenho:
$$ YTo1OntzOjM6Im1pZCI7czo3OiI3MTE5Njg3IjtzOjQ6Im5hbWUiO3M6MjE6IkthbnllIFdlc3QgLSBTdHJvbmd lciI7czo0OiJsaW5rIjtzOjQ4OiJodHRwOi8vd3d3LmVhc3kxNS5jb20vMDIgU3Ryb25nZXIgKFNuaXBwZXQpMS5tcD MiO3M6OToiX3BsYXl0aW1lIjtzOjU6IjgzMjAwIjtzOjg6Il9uZXh0aWRzIjtzOjEzNDoiMjc1ODE0MDYsMjc0MDE1 NzAsMjI1MTU0MDMsMTU1ODM2NjYsMTYzMTUzMzksMjgwNDY5MTUsMzAzOTMxODksMzUyMDAyMTMsMjIwNTE1MzAsMj c1NTg1MTQsMTM3ODkyNTYsMTk4MTY5OTgsMzA0NzI4MDEsMTUyNTk5NzksMTg5OTkxMzciO30 =
Eu successed na decodificação-lo com '...'. Descompactar ( 'm') localmente, mas não no servidor heroku (rubi 1.8.5, talvez a versão de rubi não é a questão)
Solução
O sinal de dólar não é parte da especificação Base64.
Simplesmente descascar o $$
líder antes de desembalar:
str.sub(/^\$*/, '').unpack('m')
Para retirar todos os caracteres não Base64, emulando novo (rubi 1.8.6) comportamento,
str.gsub(/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\+\/]/, '').unpack('m')
Rubi 1.8.6 irá ignorar todos os símbolos não-Base64 (incluindo o $
) dentro da corda para decodificação, enquanto 1.8.5 irá parar de processar aquando de um primeiro caractere (ver pack.c
na fonte Ruby.)