题
我有base64编码串(具有两个美元符号,所以这是不常见的base64字符串)
在问题:Base64.decode64(或.unpack(“M”))对其进行解码就好我的本地机器(红宝石1.8.6)上,但与红宝石1.8.5(由Heroku的使用的版本)没有关系”吨工作
任何想法?
修改强>
我有:
$$ YTo1OntzOjM6Im1pZCI7czo3OiI3MTE5Njg3IjtzOjQ6Im5hbWUiO3M6MjE6IkthbnllIFdlc3QgLSBTdHJvbmd lciI7czo0OiJsaW5rIjtzOjQ4OiJodHRwOi8vd3d3LmVhc3kxNS5jb20vMDIgU3Ryb25nZXIgKFNuaXBwZXQpMS5tcD MiO3M6OToiX3BsYXl0aW1lIjtzOjU6IjgzMjAwIjtzOjg6Il9uZXh0aWRzIjtzOjEzNDoiMjc1ODE0MDYsMjc0MDE1 NzAsMjI1MTU0MDMsMTU1ODM2NjYsMTYzMTUzMzksMjgwNDY5MTUsMzAzOTMxODksMzUyMDAyMTMsMjIwNTE1MzAsMj c1NTg1MTQsMTM3ODkyNTYsMTk4MTY5OTgsMzA0NzI4MDEsMTUyNTk5NzksMTg5OTkxMzciO30 =
我与“...”对其进行解码successed。解压(‘M’)在本地而不是Heroku的服务器上(红宝石1.8.5,也许红宝石版本,这不是问题)
解决方案
美元符号不是Base64的说明书的一部分。
只需拆包之前剥去主导$$
:
str.sub(/^\$*/, '').unpack('m')
要去除所有非Base64的字符,仿真新(红宝石1.8.6)的行为,
str.gsub(/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\+\/]/, '').unpack('m')
红宝石1.8.6将忽略所有非Base64的符号(包括$
)里面的字符串进行解码,而1.8.5将在第一个这样的字符停止处理(参见pack.c
在Ruby源。)