ruby-on-rails - 检查字符串是否为 base64

标签 ruby-on-rails ruby base64

我可能会收到这两个字符串:

    base = Base64.encode64(File.open("/home/usr/Desktop/test", "rb").read)
    => "YQo=\n"

    string = File.open("/home/usr/Desktop/test", "rb").read
    => "a\n"

到目前为止我尝试过的是用正则表达式检查字符串,即。 /([A-Za-z0-9+\/]{4})*([A-Za-z0-9+\/]{4}|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/]{2}==$)/ 但如果文件很大,这会很重。

我也试过 base.encoding.namestring.encoding.name 但两者返回相同。

我也看到了this post并获得了正则表达式解决方案,但还有其他解决方案吗?

有什么想法吗?我只想得到的是字符串实际上是文本还是 base64 编码的文本....

最佳答案

你可以使用这样的东西,虽然性能不是很好,但你保证不会得到误报:

require 'base64'

def base64?(value)
  value.is_a?(String) && Base64.strict_encode64(Base64.decode64(value)) == value
end

使用 strict_encode64encode64 可以防止 Ruby 在字符串很长时无意中插入换行符。参见 this post了解详情。

关于ruby-on-rails - 检查字符串是否为 base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30476873/

相关文章:

ruby-on-rails - 如何基于正则表达式执行事件记录搜索

ruby-on-rails - 模型之间共享常量

ruby-on-rails - Rails 4 关注 : Give class instance variables to model

css - 如何在 Rails 中组织 2 种不同的 CSS 样式?

pdf - Internet Explorer 无法打开 pdf 字符串文件

javascript - Sproutcore 中的 Base64 编码

ruby-on-rails - Rails - 带有 data-* 属性的 link_to 助手

ruby-on-rails - Rails 不会更新某些 Assets 的指纹

php base64编码imagecreatetruecolor

mysql - 分割除奇数/偶数以外的数组的方法