Ответ 1
Благодаря комментариям по этому вопросу David Schwartz, я создал istextorbinary для решения этой проблемы.
Мне интересно, что было бы лучшим способом проверить, является ли файл двоичным или ASCII с Node.js?
Кажется, существуют два способа, не относящиеся к Node.js:
Проверка типа MIME: Как проверить, является ли файл ASCII или двоичным в PHP - однако у этого есть проблемы, например, pre-precessors часто не имеют признанного типа mime и возвращаются к application/octet-stream
при их проверке с помощью mime
Проверяя размер байта с помощью буфера потока Как определить содержимое файла как ASCII или двоичный файл, который кажется довольно интенсивным и еще не обеспечивает a Node.js.
Так уже есть другой путь? Возможно, секретный Node.js вызов или модуль, о которых я не знаю? Или, если я должен сам это сделать, какой способ предложить?
Спасибо
Благодаря комментариям по этому вопросу David Schwartz, я создал istextorbinary для решения этой проблемы.
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 */});
Если производительность критическая, рассмотрите возможность написания пользовательской функции С++ для вашего связанного ответа.