【发布时间】:2017-10-01 18:09:26
【问题描述】:
我使用的是 Ruby 2.4 和 Rails 5。我在一个名为“content”的变量中有文件内容。内容可能包含来自诸如 PDF 文件、Word 文件或 HTML 文件之类的数据。有什么方法可以判断变量是否包含二进制数据?最后,我想知道这是 PDf、Microsoft Office 还是其他类型的 OpenOffice 文件。这个答案——Rails: possible to check if a string is binary?——建议我可以检查变量的编码
content.encoding
它会产生
ASCII-8BIT
然而,在二进制数据的情况下,我注意到有些情况下,存储在变量中的 HTML 内容也可以返回“ASCII-8BIT”作为 content.encoding,因此使用“content.encoding”不是告诉我是否有二进制数据的万无一失的方法。这种方式是否存在,如果存在,是什么?
【问题讨论】:
-
鉴于您的要求,您似乎需要对内容进行一些分析。我会提取前 n 个字节并根据您的标准 ASCII 代码检查它们。如果您遇到的许多字符不是 ASCII,那么您的内容很可能是二进制的。似乎卡方检验可能很合适。为什么不能访问实际的文件对象?
-
我正在从没有关于文件的其他信息的数据库中访问内容。有时有一个文件名,但扩展名对于确定文件/内容类型是不可靠的。
-
等等,文件的内容在数据库里吗?
-
我您真正的问题不是关于二进制数据本身,而是关于确定数据的文件类型,我建议您查看ruby-filemagic gem,它将为您提供更多信息可靠。
-
@Dave 根据 github.com/blackwinter/ruby-filemagic 的 gem 文档,它可以使用缓冲区,因此您不需要向文件写入任何内容。只需将前 N 个字节读入内存并将其传递给 gem。
标签: ruby-on-rails ruby encoding binary ms-office