decodifica base64 con il simbolo del dollaro in rubino 1.8.5
Domanda
Ho una stringa con codifica base64 (con due segni di dollaro, quindi non è una stringa base64 comune)
Il problema:Base64.decode64 (o .unpack("m")) lo decodifica perfettamente sul mio computer locale (Ruby 1.8.6), ma con Ruby 1.8.5 (la versione utilizzata da Heroku) non funziona
Qualche idea ?
modificare:
Io ho :
$$YTo1OntzOjM6Im1pZCI7czo3OiI3MTE5Njg3IjtzOjQ6Im5hbWUiO3M6MjE6IkthbnllIFdlc3QgLSBTdHJvbmd lciI7czo0OiJsaW5rIjtzOjQ4OiJodHRwOi8vd3d3LmVhc3kxNS5jb20vMDIgU3Ryb25nZXIgKFNuaXBwZXQpMS5tcD MiO3M6OToiX3BsYXl0aW1lIjtzOjU6IjgzMjAwIjtzOjg6Il9uZXh0aWRzIjtzOjEzNDoiMjc1ODE0MDYsMjc0MDE1 NzAsMjI1MTU0MDMsMTU1ODM2NjYsMTYzMTUzMzksMjgwNDY5MTUsMzAzOTMxODksMzUyMDAyMTMsMjIwNTE1MzAsMj c1NTg1MTQsMTM3ODkyNTYsMTk4MTY5OTgsMzA0NzI4MDEsMTUyNTk5NzksMTg5OTkxMzciO30=
Sono riuscito a decodificarlo con '...'.unpack("m") localmente ma non sul server heroku (Ruby 1.8.5, forse la versione Ruby non è il problema)
Soluzione
Il simbolo del dollaro non fa parte delle specifiche Base64.
Basta togliere la parte iniziale $$
prima di disimballare:
str.sub(/^\$*/, '').unpack('m')
Per eliminare tutti i caratteri non Base64, emulando il nuovo comportamento (Ruby 1.8.6),
str.gsub(/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\+\/]/, '').unpack('m')
Ruby 1.8.6 ignorerà tutti i simboli non Base64 (incluso il $
) all'interno della stringa da decodificare, mentre 1.8.5 interromperà l'elaborazione al primo di questi caratteri (vedi pack.c
nella fonte Ruby.)