解码base64与美元符号ruby 1.8.5

时间:2009-02-28 16:42:37

标签: ruby base64 decode

我有base64编码的字符串(带有两个美元符号,因此它不是常见的base64字符串)

问题:Base64.decode64(或.unpack(“m”))在我的本地机器(ruby 1.8.6)上解码它很好,但是使用ruby 1.8.5(Heroku使用的版本)它没有'工作

有什么想法吗?

修改

我有:

$$ YTo1OntzOjM6Im1pZCI7czo3OiI3MTE5Njg3IjtzOjQ6Im5hbWUiO3M6MjE6IkthbnllIFdlc3QgLSBTdHJvbmd lciI7czo0OiJsaW5rIjtzOjQ4OiJodHRwOi8vd3d3LmVhc3kxNS5jb20vMDIgU3Ryb25nZXIgKFNuaXBwZXQpMS5tcD MiO3M6OToiX3BsYXl0aW1lIjtzOjU6IjgzMjAwIjtzOjg6Il9uZXh0aWRzIjtzOjEzNDoiMjc1ODE0MDYsMjc0MDE1 NzAsMjI1MTU0MDMsMTU1ODM2NjYsMTYzMTUzMzksMjgwNDY5MTUsMzAzOTMxODksMzUyMDAyMTMsMjIwNTE1MzAsMj c1NTg1MTQsMTM3ODkyNTYsMTk4MTY5OTgsMzA0NzI4MDEsMTUyNTk5NzksMTg5OTkxMzciO30 =

我成功地用'...'解码它。解包(“m”)在本地但不在heroku服务器上(ruby 1.8.5,也许红宝石版本不是问题)

1 个答案:

答案 0 :(得分:3)

美元符号不是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源代码。)