Python 什么决定了一个文件应该是应用程序/八位字节流还是文本/纯文本?

Python 什么决定了一个文件应该是应用程序/八位字节流还是文本/纯文本?,python,mime,Python,Mime,我有一段代码为我处理文件上传,理想情况下我只接受文本文件(csv、制表符分隔文件等),因此我添加了以下代码块: mimetype = magic.from_buffer(request.FILES['docfile'].read(512), mime=True) if form.is_valid() and mimetype == 'text/plain': .... 就在最近,我的一个用户尝试上载一个文本文件,但系统拒绝了它,该文件的mime是: file --mime-type

我有一段代码为我处理文件上传,理想情况下我只接受文本文件(csv、制表符分隔文件等),因此我添加了以下代码块:

mimetype = magic.from_buffer(request.FILES['docfile'].read(512), mime=True)
if form.is_valid() and mimetype == 'text/plain':
     ....
就在最近,我的一个用户尝试上载一个文本文件,但系统拒绝了它,该文件的mime是:

file --mime-type -b input_file.txt 
application/octet-stream
当然,之前上传的所有文件都是文本/纯文本的。这两者有什么区别?是否有更“全局”的方法来检查文件是否为文本文件?

我发现这可能与此相关:

还有一种方法:

例如:

is_binary_string(open('/usr/bin/python', 'rb').read(1024))
True
is_binary_string(open('/usr/bin/dh_python3', 'rb').read(1024))
False

处理这个问题的正确方法是同时接受二进制文件和文本文件吗?我这样问是因为从技术上讲,我可以将application/octet流添加为另一种mime类型。如果您采用这种方式,是的,您需要同时接受这两种类型,然后对它们进行测试。我不太了解gtk的MIMEtypes appart,但它似乎不是100%可靠。
is_binary_string(open('/usr/bin/python', 'rb').read(1024))
True
is_binary_string(open('/usr/bin/dh_python3', 'rb').read(1024))
False