dekodieren base64 mit Dollarzeichen in Ruby 1.8.5
Frage
Ich habe Base64-codierte Zeichenfolge (mit zwei Dollar-Zeichen, es ist also nicht eine gemeinsame base64 string)
Das Problem: Base64.decode64 (oder .unpack ( "m")) decodiert es auf meinem lokalen Rechner (Rubin 1.8.6) ganz gut, aber mit Ruby 1.8.5 (der Version von Heroku verwendet wird) es doesn‘ t Arbeit
Irgendwelche Ideen?
Bearbeiten
ich habe:
$$ YTo1OntzOjM6Im1pZCI7czo3OiI3MTE5Njg3IjtzOjQ6Im5hbWUiO3M6MjE6IkthbnllIFdlc3QgLSBTdHJvbmd lciI7czo0OiJsaW5rIjtzOjQ4OiJodHRwOi8vd3d3LmVhc3kxNS5jb20vMDIgU3Ryb25nZXIgKFNuaXBwZXQpMS5tcD MiO3M6OToiX3BsYXl0aW1lIjtzOjU6IjgzMjAwIjtzOjg6Il9uZXh0aWRzIjtzOjEzNDoiMjc1ODE0MDYsMjc0MDE1 NzAsMjI1MTU0MDMsMTU1ODM2NjYsMTYzMTUzMzksMjgwNDY5MTUsMzAzOTMxODksMzUyMDAyMTMsMjIwNTE1MzAsMj c1NTg1MTQsMTM3ODkyNTYsMTk4MTY5OTgsMzA0NzI4MDEsMTUyNTk5NzksMTg5OTkxMzciO30 =
I successed es bei der Decodierung mit '...'. Entpacken ( "m") lokal, aber nicht auf dem Heroku Server (Rubin 1.8.5, vielleicht die Ruby-Version es ist nicht das Problem)
Lösung
Das Dollarzeichen ist nicht Teil der Base64-Spezifikation.
Sie einfach abzustreifen die führenden $$
vor dem Auspacken:
str.sub(/^\$*/, '').unpack('m')
Um alle nicht-Base64-Zeichen Streifen, emuliert neue (Rubin 1.8.6) Verhalten,
str.gsub(/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\+\/]/, '').unpack('m')
Rubin 1.8.6 wird alle nicht-Base64 Symbole ignorieren (einschließlich der $
) innerhalb der Zeichenkette zu dekodieren, während 1.8.5 der Verarbeitung bei dem ersten solchen Charakter stoppen (pack.c
in der Ruby Quelle sehen.)