декодировать base64 со знаком доллара в ruby ​​1.8.5 - PullRequest
1 голос
/ 28 февраля 2009

У меня есть строка в кодировке base64 (с двумя знаками доллара, поэтому это не обычная строка 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 ​​это не проблема)

1 Ответ

3 голосов
/ 28 февраля 2009

Знак доллара не является частью спецификации Base64.

Просто удалите ведущую $$ перед распаковкой:

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

Чтобы удалить все символы, отличные от Base64, эмулируя новое (Ruby 1.8.6) поведение,

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

Ruby 1.8.6 будет игнорировать все символы не-Base64 (включая $) внутри строки для декодирования, тогда как 1.8.5 остановит обработку первого такого символа (см. pack.c в источнике Ruby.)

...