我有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,也许红宝石版本不是问题)
答案 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源代码。)