是否有一个库可以确定给定的内容类型是二进制还是基于文本的?
显然,text/*
总是文本的,但对于像 application/json
、image/svg+xml
或甚至 application/x-latex
这样的内容类型,如果不检查实际数据,就很难确定。
是否有一个库可以确定给定的内容类型是二进制还是基于文本的?
显然,text/*
总是文本的,但对于像 application/json
、image/svg+xml
或甚至 application/x-latex
这样的内容类型,如果不检查实际数据,就很难确定。
我不知道关于二进制和非二进制MIME类型的确切列表,但对于常见MIME类型,我认为以下内容相当不错。
def is_binary(mime_type, subtype):
if mime_type == "text":
return False
if mime_type != "application":
return True
return subtype not in ["json", "ld+json", "x-httpd-php", "x-sh", "x-csh", "xhtml+xml", "xml"]
file(1)
(以及相应的libmagic)将提供以下输出:> file --mime-encoding /bin/ls
/bin/ls: binary
> file --mime-encoding /etc/passwd
/etc/passwd: us-ascii
有一个用于Python的libmagic包装器——pymagic。这是实现您想要的最简单的方法。请记住,魔术只不过是指纹一样的东西。如果某些东西“看起来”像另一种文件格式,那么可能会出现误报,但在大多数情况下,pymagic会给您所需的内容。
需要注意的一点是,“简单的解决方案”是检查任何字符是否“超出”可打印的ASCII范围,因为您可能会遇到Unicode,即使是文本内容,它看起来像二进制(实际上也是二进制)。