Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查ruby字符串是实际字符串还是blob数据(如图像)_Ruby_String_Blob - Fatal编程技术网

如何检查ruby字符串是实际字符串还是blob数据(如图像)

如何检查ruby字符串是实际字符串还是blob数据(如图像),ruby,string,blob,Ruby,String,Blob,在ruby中,如何检查字符串是实际字符串还是blob数据(如图像),从数据类型的角度看,它们是ruby字符串,但实际上它们的内容非常不同,因为一个是文字字符串,另一个是blob数据(如图像) 有人能给我提供一些线索吗?提前谢谢。像图像或声音文件这样的文件定义了可以“嗅探”的块。有很多关于密钥字节的信息和确定文件的方法。通过查看数据中的字节偏移量,您可以找到它 另一种方法是使用一些“魔法”,即代码嗅探文件中的键字节或字节类型,试图找出其类型*nix系统通过文件命令将其内置。做一个man文件或man

在ruby中,如何检查字符串是实际字符串还是blob数据(如图像),从数据类型的角度看,它们是ruby字符串,但实际上它们的内容非常不同,因为一个是文字字符串,另一个是blob数据(如图像)


有人能给我提供一些线索吗?提前谢谢。

像图像或声音文件这样的文件定义了可以“嗅探”的块。有很多关于密钥字节的信息和确定文件的方法。通过查看数据中的字节偏移量,您可以找到它

另一种方法是使用一些“魔法”,即代码嗅探文件中的键字节或字节类型,试图找出其类型*nix系统通过
文件
命令将其内置。做一个
man文件
man magic
,了解更多信息或查看维基百科的文章


使用相同的技术,但基于GNU的libmagic。

像图像或声音文件这样的文件定义了可以“嗅探”的块。有很多关于密钥字节的信息和确定文件的方法。通过查看数据中的字节偏移量,您可以找到它

另一种方法是使用一些“魔法”,即代码嗅探文件中的键字节或字节类型,试图找出其类型*nix系统通过
文件
命令将其内置。做一个
man文件
man magic
,了解更多信息或查看维基百科的文章


使用相同的技术,但基于GNU的libmagic。

字节是字节。无法声明某些内容不是文件数据。以多种格式构造一个只包含可打印ASCII的有效文件是相当容易的。特别是在处理Unicode时,您处于非常模糊的领域。如果可能的话,我建议修改该方法,使其包含两个参数。。。一个用于传递文本,另一个用于传递二进制数据


您可以做的一件事是查看字符串的长度。即使对于一个很小的图像,大多数图像格式也至少有500-600字节,虽然这绝不是一个精确的测试,但如果你通过了,比如说,一个20k字符串,它可能就是一个图像。如果它是文本,它将是相当大的一部分(就像一本典型小说的四分之一,或者差不多)

字节就是字节。无法声明某些内容不是文件数据。以多种格式构造一个只包含可打印ASCII的有效文件是相当容易的。特别是在处理Unicode时,您处于非常模糊的领域。如果可能的话,我建议修改该方法,使其包含两个参数。。。一个用于传递文本,另一个用于传递二进制数据


您可以做的一件事是查看字符串的长度。即使对于一个很小的图像,大多数图像格式也至少有500-600字节,虽然这绝不是一个精确的测试,但如果你通过了,比如说,一个20k字符串,它可能就是一个图像。如果它是文本,它将是相当大的一部分(就像一本典型小说的四分之一,或者差不多)

什么将构成一个字符串?你期待简单的ASCII码吗?UTF-8?还是以其他方式编码的文本

如果您知道您将获得ASCII文本或一个blob,那么您只需旋转第一个
n
字节,看看是否有任何内容设置了8位,这将告诉您您有二进制。奥托,找不到任何东西也不能保证你有短信

如果您要获得UTF-8 Unicode,那么您也可以做同样的事情,但要查找无效的UTF-8序列。当然,同样的警告也适用

您可以在第一个
n
字节中扫描0x00和0x20之间的任何内容。如果你发现任何一个字节那么低,那么你可能有一个某种二进制blob。但也许不是

正如Tyler Eaves所说:字节就是字节。你从一堆字节开始,试图找到对它们有意义的解释


你最好的办法是让调用者提供预期的解释,或者接受格雷格的建议,使用一个神奇的数字库。

什么构成字符串?你期待简单的ASCII码吗?UTF-8?还是以其他方式编码的文本

如果您知道您将获得ASCII文本或一个blob,那么您只需旋转第一个
n
字节,看看是否有任何内容设置了8位,这将告诉您您有二进制。奥托,找不到任何东西也不能保证你有短信

如果您要获得UTF-8 Unicode,那么您也可以做同样的事情,但要查找无效的UTF-8序列。当然,同样的警告也适用

您可以在第一个
n
字节中扫描0x00和0x20之间的任何内容。如果你发现任何一个字节那么低,那么你可能有一个某种二进制blob。但也许不是

正如Tyler Eaves所说:字节就是字节。你从一堆字节开始,试图找到对它们有意义的解释


你最好的办法是让打电话的人提供预期的解释,或者接受格雷格的建议,使用魔法数字库。

这些链接似乎不适合我的意图。我的上下文是有一个ruby方法,它接受一个参数字符串,可能是文字字符串,可能是图像blob字符串,所以我需要根据字符串的不同内容执行不同的操作。事实上,如果ruby中有Blob类型,我想这可能会解决我的问题,但我找不到它。似乎链接不适合我的意图。我的上下文是有一个ruby方法,它接受一个参数字符串,可能是文字字符串,可能是图像blob字符串,所以我需要根据字符串的不同内容执行不同的操作。事实上,如果ruby中有Blob类型,我想这可能会解决我的问题,但我找不到它。我同意你的观点,我选择了第一个选择,我认为它可能更简单。非常感谢。我同意你的看法,我选择了第一个选择,我认为