【问题标题】:decode base64 with dollar sign in ruby 1.8.5在ruby 1.8.5中使用美元符号解码base64
【发布时间】:2009-02-28 16:42:36
【问题描述】:

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

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

有什么想法吗?

编辑:

我有:

$$YTo1OntzOjM6Im1pZCI7czo3OiI3MTE5Njg3IjtzOjQ6Im5hbWUiO3M6MjE6IkthbnllIFdlc3QgLSBTdHJvbmd lcI7czo0OiJsaW5rIjtzOjQ4OiJodHRwOi8vd3d3LmVhc3kxNS5jb20vMDIgU3Ryb25nZXIgKFNuaXBwZXQpMS5tcD MiO3M6OToiX3BsYXl0aW1lIjtzOjU6IjgzMjAwIjtzOjg6Il9uZXh0aWRzIjtzOjEzNDoiMjc1ODE0MDYsMjc0MDE1 NzAsMjI1MTU0MDMsMTU1ODM2NjYsMTYzMTUzMzksMjgwNDY5MTUsMzAzOTMxODksMzUyMDAyMTMsMjIwNTE1MzAsMj c1NTg1MTQsMTM3ODkyNTYsMTk4MTY5OTgsMzA0NzI4MDEsMTUyNTk5NzksMTg5OTkxMzciO30=

我在本地成功地使用 '...'.unpack("m") 解码它,但不是在 heroku 服务器上(ruby 1.8.5,也许 ruby​​ 版本不是问题)

【问题讨论】:

    标签: ruby base64 decode


    【解决方案1】:

    美元符号不是 Base64 规范的一部分。

    解包前只需去掉前面的$$

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

    去除所有非 Base64 字符,模拟新的 (Ruby 1.8.6) 行为,

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

    Ruby 1.8.6 将忽略要解码的字符串中的所有非 Base64 符号(包括 $),而 1.8.5 将在第一个此类字符处停止处理(请参阅 Ruby 源代码中的 pack.c。)

    【讨论】:

    • str.gsub(/[^A-Za-z0-9+\/]/, '')不是更方便吗?
    猜你喜欢
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多