用Node.js检查文件是二进制文件还是ASCII文件?

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

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

  1. 检查MIMEtypes: 如何在PHP中检查文件是ASCII还是二进制文件 – 但是这样做有问题,因为例如预处理器通常没有识别的MIMEtypes,并且在检查时使用application/octet-stream 哑剧

  2. 通过使用stream缓冲区检查字节大小,以及如何将文件内容标识为ASCII或二进制文件 – 这似乎相当密集,并且还提供了一个node.js示例。

那么还有另一种方法吗? 也许是一个秘密的node.js调用或模块,我不知道? 或者如果我自己要这样做,会有什么build议?

谢谢

由于David Schwartz对这个问题的评论,我创build了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 */}); 

如果性能至关重要,那么可以考虑为每个链接的答案写一个自定义的C ++函数