我可能会收到这两个字符串:
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.name
和 string.encoding.name
但两者返回相同。
我也看到了this post并获得了正则表达式解决方案,但还有其他解决方案吗?
有什么想法吗?我只想得到的是字符串实际上是文本还是 base64 编码的文本....
最佳答案
你可以使用这样的东西,虽然性能不是很好,但你保证不会得到误报:
require 'base64'
def base64?(value)
value.is_a?(String) && Base64.strict_encode64(Base64.decode64(value)) == value
end
使用 strict_encode64
与 encode64
可以防止 Ruby 在字符串很长时无意中插入换行符。参见 this post了解详情。
关于ruby-on-rails - 检查字符串是否为 base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30476873/