Проверьте, является ли файл двоичным или ASCII с Node.js?

Мне интересно, что было бы лучшим способом проверить, является ли файл двоичным или ASCII с Node.js?

Кажется, существуют два способа, не относящиеся к Node.js:

Так уже есть другой путь? Возможно, секретный Node.js вызов или модуль, о которых я не знаю? Или, если я должен сам это сделать, какой способ предложить?

Спасибо

Ответы

Ответ 1

Благодаря комментариям по этому вопросу David Schwartz, я создал istextorbinary для решения этой проблемы.

Ответ 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 */});

Если производительность критическая, рассмотрите возможность написания пользовательской функции С++ для вашего связанного ответа.