【问题标题】:check if string is base64检查字符串是否为base64
【发布时间】:2015-05-27 08:19:41
【问题描述】:

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

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

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

到目前为止,我尝试的是使用正则表达式 i-e 检查字符串。 /([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编码的文本......

【问题讨论】:

  • 请再次阅读我已更新的问题。我已经看过那个帖子了
  • "但是如果文件很大,这会很重。"不幸的是,没有其他方法可以知道。这句话是有效的英语 skagpoople 吗?你不知道,直到你在其中找到一些告诉你它不是的东西。这与String#encoding 报告的“编码”不同——即字符编码,而不是您感兴趣的文件格式。

标签: ruby-on-rails ruby base64


【解决方案1】:

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

require 'base64'

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

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

【讨论】:

  • 如果您的字符串很长,您可能需要使用strict_encode64,以避免 Ruby 无意中插入换行符。详情请见stackoverflow.com/a/2621023/515584
  • 使用strict_encode64绝对是正确的选择
  • Base64.encode64 不工作,使用strict_encode64
猜你喜欢
  • 1970-01-01
  • 2012-01-24
  • 2011-05-15
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 2017-11-28
相关资源
最近更新 更多