为什么我得到两个不同的 js 文件的 text/plain 和 text/x-java ?

为什么我得到两个不同的 js 文件的 text/plain 和 text/x-java ?

我用来/usr/bin/file -i file_path获取有关我的文件的信息。

我有一个简单的网站项目,其中有几个 js 文件。

当我使用/usr/bin/file -i file_name.js其中一些时,我得到这个结果:

file_name.js:文本/纯文本;字符集=utf-8

但对于其他一些文件,我得到了这样的结果:

文件名.js: 文本/x-java;字符集=utf-8

由于我使用的质量控制实用程序取决于文件类型,因此这种不一致会导致错误。

为什么会这样呢?我应该检查或排除哪些内容?如何?

答案1

在我的系统上,file对名称结尾的文件进行了猜测.js(我不知道其中有多少实际上是 javascript 文件):

$ locate -e0 '*.js' | xargs -r0 file -b --mime-type | sort | uniq -c
     60 application/json
     18 application/octet-stream
      1 application/x-terminfo
      1 inode/directory
     62 inode/symlink
    259 inode/x-empty
      1 regular file, no read permission
      2 text/csv
    220 text/html
  13342 text/plain
     30 text/x-Algol68
      6 text/x-asm
    126 text/x-c
     32 text/x-c++
     41 text/x-java
     15 text/x-perl
     82 text/x-tex

file只是通过使用启发式读取文件内容来猜测文件类型。对于 JavaScript、C、C++、Java 源文件等始终没有明确区别的文本文件,猜测往往很疯狂。

AFAICT,唯一报告fileapplication/javascript具有#!she-bang 引用 Nodejs 解释器的文件。报告为的text/x-java那些行以 开头import并以 结尾;

请注意,编写在多种语言中有效的代码是一门艺术,称为多语言编码。有一个整体codegolf.stackexchange.com 上有关它的问答类别,这表明在一般情况下并不总是可以从文件内容中确定地识别编程语言。你所能做的就是说:看起来可能是 javascript 或 C++ 等。

相关内容