检查字符串是否为 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.name
和 string.encoding.name
但都 returns 一样。
我也看过 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。
我可能会收到这两个字符串:
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
但都 returns 一样。
我也看过 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。