Rails:可以检查一个字符串是否是二进制的?

在特定的Rails应用程序中,我将二进制数据从LDAP中提取到变量中进行处理。 有没有办法检查变量是否包含二进制数据? 如果它不是二进制的,我不想继续处理这个变量。 我希望使用is_a? ...

实际上,我从LDAP中获取的二进制数据是一张照片。 所以也许有更好的方法来确保变量包含二进制JPEG数据? 此检查的结果将决定是继续处理JPEG数据,还是从磁盘渲染默认JPEG。


这个问题实际上比你想象的要多得多。 只有在Ruby 1.9中存在字符(在某些编码中)与原始字节的概念。 所以在Ruby 1.9中,你可能能够避免请求编码。 由于您从LDAP获取内容,所以应该广为人知,最有可能的是ISO-8859-1或UTF-8。

在这种情况下,您可以获取编码并对其执行操作:

some_variable.encoding # => when ASCII-8BIT, treat as a photo

既然你真的想验证二进制数据是一张照片,那么通过图像库运行它是有意义的。 RMagick浮现在脑海。 该文档将向您展示如何验证任何二进制数据实际上是JPEG编码的。 然后,您还可以存储其他属性,例如宽度和高度。

如果您没有安装RMagick,另一种方法是将数据保存到Tempfile中,然后下载到Unix中(假设您使用的是Unix)并尝试识别该文件。 如果您的系统安装了ImageMagick,那么identify命令会告诉你所有关于图像的信息。 但只是调用file也会告诉你:

~/Pictures$ file P1020359.jpg 
P1020359.jpg: JPEG image data, EXIF standard, comment: "AppleMark"

您需要从Ruby的shell中调用identifyfile命令:

%x(identify #{tempfile})
%x(file #{tempfile})
链接地址: http://www.djcxy.com/p/25307.html

上一篇: Rails: possible to check if a string is binary?

下一篇: Executing grep from Ruby