使用Node.js检查文件是二进制文件还是ASCII文件?
我想知道使用Node.js检查文件是二进制文件还是ASCII文件的最佳方法是什么 似乎有两种方法不是node.js特有的:使用Node.js检查文件是二进制文件还是ASCII文件?,node.js,binary,ascii,Node.js,Binary,Ascii,我想知道使用Node.js检查文件是二进制文件还是ASCII文件的最佳方法是什么 似乎有两种方法不是node.js特有的: 检查MIME类型:-但是这也有问题,例如前置程序通常没有可识别的MIME类型,在使用 通过使用流缓冲区检查字节大小-这似乎相当密集,但提供了node.js示例 那么已经有别的办法了吗?可能是我不知道的秘密node.js调用或模块?或者,如果我必须自己做这件事,会有什么建议 谢谢,因此如果文件的全部内容都是该范围内的字节值,则可以将其视为ASCII文件 函数fileIsAsc
函数fileIsAscii(文件名,回调){
//读取未编码的文件以进行原始缓冲区访问。
require('fs').readFile(文件名,函数(err,buf){
如果(错误)抛出错误;
var isAscii=真;
对于(vari=0,len=buf.length;i127){isAscii=false;break;}
}
回调(isAscii);//如果所有八位字节都在[0127]中,则为true。
});
}
fileIsAscii('/usr/share/dict/words',函数(x){/*x===true*/});
fileIsAscii('/bin/ls',函数(x){/*x===false*/});
如果性能很关键,那么考虑一下你的链接答案写一个自定义的C++函数。
< P>由于我对这个问题的评论,我创建了这个问题。 < P>我是从谷歌来的,但是因为我找不到满意的答案,我采取了另一种对我有用的方法: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");
}
它是如何工作的?如果您尝试以正常方式(不使用十六进制编辑器)打开二进制数据,它将遇到一些渲染问题,这些问题会转化为一系列奇怪的字符� 称为“替换字符” 你能定义一下“二进制文件”是什么意思吗?测试的方式完全取决于你的意思,并且没有一个公认的定义。比如说一个图像,或者更具体地说,任何不是文本的东西。对不起!这还不够具体。你打算如何处理这些信息?(检查前8KB的非ASCII字符是否足够?)。问题是似乎有几种方法,但我不确定如何将它们移植到Node.js。你的建议似乎很好,所以我很乐意接受一个代码示例可以提供如何——因为文档不清楚你如何执行这样的检查(那些字节是ASCII还是不)。如果高清晰,你可以考虑字节ASCII。但对于UTF-8或Unicode等,你可能会(或可能不会)考虑文本。你确实需要提供一个“文本”和“二进制”的精确定义,或者你需要记录你的用例,这样我们就可以找到正确的定义。如果你的意图是真正地识别文本文件而不是ASCII编码,那么考虑更新你的问题。因此,您不必维护太多。无论如何,istextorbinary现在是Javascript,这是一些编辑器和浏览器将二进制文件显示为文本的唯一方式。保存从文件中读取的二进制数据的js字符串本身(除非您是从textarea获取它,或者从任何文本对象获取它)将只具有0-255之间的值,而不会具有ufffd。Firefox不会转换为相同的字符。它使用一种特殊的字体来显示字符代码值。当您使用utf-8从某个位置抓取带有特定字符的文本,然后尝试在使用缺少这些字符的旧代码页的页面中使用它时,也会出现这种字符替换。因此,它不一定表示二进制。如何将二进制解码为图像?我很难做到这一点,下面是我的问题的链接。