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)

Foi útil?

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.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top