确定MIME类型是二进制还是基于文本

AnC*_*AnC 5 python media-type mime-types

是否有一个库可以确定给定的内容类型是二进制还是基于文本?

显然,text/*它总是文本的,但是对于诸如之类的东西application/jsonimage/svg+xml甚至application/x-latex在不检查实际数据的情况下也相当棘手。

W.P*_*ill 5

我不知道二进制和非二进制 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"]
Run Code Online (Sandbox Code Playgroud)


syn*_*tel 2

有一个用于 python 的 libmagic 包装器—— pymagic。这是实现您想要的最简单的方法。请记住,魔法的效果取决于指纹。如果某些文件“看起来”像另一种文件格式,则可能会出现误报,但大多数情况下 pymagic 都会为您提供所需的内容。

需要注意的一件事是检查是否有任何字符在可打印 ASCII 范围“之外”的“简单解决方案”,因为您可能会遇到看起来像二进制的 unicode(事实上,是二进制的)即使它只是文本内容。