检查文件是否是二进制或ASCII与Node.js的?(Check if a file is bina

2019-06-23 18:48发布

我想知道什么是检查文件是否二进制或ASCII与Node.js的最好方法是什么?

似乎有两种方式不特定的node.js:

  1. 检查MIME类型: 如何检查文件是否为ASCII或二进制在PHP中 -然而,这有它的问题,因为例如预precessors往往没有一个公认的MIME类型和恢复application/octet-stream使用检查时,他们哑剧

  2. 通过使用带有流缓冲区检查字节大小如何识别文件内容为ASCII或二进制 -这似乎很密集,但确实提供了一个Node.js的例子。

所以有另一种方式了吗? 或许一个秘密的node.js来电或模块,我不知道? 或者,如果我必须这样做我自己,有什么办法将建议?

谢谢

Answer 1:

由于对这个问题的意见大卫·施瓦茨 ,我创建istextorbinary来解决这个问题。



Answer 2:

ASCII字符定义0-127 ,因此,如果一个文件的全部内容都在此范围内的字节值那么它可以被认为是一个ASCII文件。

function fileIsAscii(filename, callback) {
  // Read the file with no encoding for raw buffer access.
  require('fs').readFile(filename, function(err, buf) {
    if (err) throw err;
    var isAscii = true;
    for (var i=0, len=buf.length; i<len; i++) {
      if (buf[i] > 127) { isAscii=false; break; }
    }
    callback(isAscii); // true iff all octets are in [0, 127].
  });
}
fileIsAscii('/usr/share/dict/words', function(x){/* x === true */});
fileIsAscii('/bin/ls', function(x){/* x === false */});

如果性能是至关重要的再考虑每写你链接的答案定制的C ++函数。



Answer 3:

我来到这里,从谷歌,但我无法找到一个满意的答复,我又过了的做法,为我工作:

const string_to_test = "I am just a piece of text";
//const binary_to_test = "��˰!1�H��1�1����!H�=u�!�";
if(/\ufffd/.test(string_to_test) === true){
    console.log("I'm 'binary'");
}else{
    console.log("I'm proper text");
}

它是如何工作的? 如果您尝试打开一个正常的方式二进制数据(不使用十六进制编辑器)时,会遇到哪些转化为你的这个名为“替换字符”怪异字符的继承一些渲染的问题。



文章来源: Check if a file is binary or ASCII with Node.js?