检查字符串是否为 base64

check if string is 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 但都 returns 一样。

我也看过 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