CNode

nodejs 怎么判断一个文件是文件文件还是二进制文件?

问答
Ssuxiaoxin发布于10 年前最后回复8 年前17 回复11059 浏览0 收藏

nodejs 怎么判断一个文件是文件文件还是二进制文件?

查看回复

回复 (17)

C
casanovawu#1·8 年前

@

来自酷炫的 CNodeMD

C
casanovawu#2·8 年前
引用 casanovawu@yjhjstz @suxiaoxin @myy i稀客 来自酷炫的 CNodeMD

@myy @backsapce @magicdawn @lx1412 @casanovawu

来自酷炫的 CNodeMD

S
suxiaoxin#4·8 年前
Y
yjhjstz#5·10 年前

任何文件都是二进制流吧。

S
suxiaoxin#6·10 年前
引用 yjhjstz任何文件都是二进制流吧。

@yjhjstz 不是的,有区分的,好比我们读取文件和写入文件,二进制文件跟文本操作是不一样的

M
myy#7·10 年前

应该是 “文本文件”吧? 这个没有严格的区分。

B
backsapce#8·10 年前

我理解为你是想区别二进制和文本文件吧。扫描文件的前N个字节,一次都一个char的长度(8位的char),如果有任何字符数值大于127,肯定不是文本文件了。

L
lx1412#9·10 年前

没区别吧。只不过文本文件字符编码不一样对应的二进制也不一样,一般都是utf-8吧

M
magicdawn#10·10 年前
引用 suxiaoxin@yjhjstz 不是的,有区分的,好比我们读取文件和写入文件,二进制文件跟文本操作是不一样的

@suxiaoxin

对的, 文本一定是有编码 encoding 存在的... so 做 encoding detect 应该可以

C
casanovawu#11·10 年前
引用 myy应该是 “文本文件”吧? 这个没有严格的区分。

@yjhjstz @suxiaoxin @myy i稀客

来自酷炫的 CNodeMD

Q
Qquanwei#12·10 年前

可以调用shell命令file判断是ASCII文件还是二进制文件

S
suxiaoxin#14·10 年前
引用 Qquanwei可以调用shell命令file判断是ASCII文件还是二进制文件

@Qquanwei 目前就是这样做的,但还想找个不借助shell的.因为借助shell,不兼容window了

B
backsapce#15·10 年前
引用 suxiaoxin@backsapce 不是很明白,能告诉程序怎么写吗?

@suxiaoxin 原理是,不管是哪种编码的文本文件,解构成单个的char看,必然是ascii字符组成的,数值肯定是0-127.而二进制文件一定会有超过127的字节存在.基于这种理论,你读取某个文件的开始一段,逐个判断是否有字符超过127,如果有,那么肯定是非文本文件了.当然全部扫描是极端的做法,消耗太大,一般就只扫描一段,至于linux file命令的判断,他做的更多,比如在判断可执行的二进制文件时,他通过扫描特定系统的ABI来区分是你某个平台下的可执行文件.

S
suxiaoxin#17·10 年前
参与回复
登录后即可参与回复。登录