快速判断文件是文本文件或二进制文件

 

判断一个文件是文本文件还是二进制文件可以帮助压缩软件针对不同文件选择对应的算法,那么如何判断一个文件是是文本还是二进制呢?

旧版本的pkzip使用的方法是:如果80%以上的字节都落在7..127的范围里,就认为它是文本文件,否则它就是二进制文件。代码如下:

 

 

 

 

 

但是这个方法有一些缺陷,比如有的文件里包含了一些128..255里的字母,比如希腊语字母,或者这个文件使用其他语言编码包括了汉字等多字节字符甚至使用Unicode编码就无法判断了。所以下面介绍一种用在zlib上的新方法,,可以判断ASCII,Unicode,以及其他一些宽字符集。

 

这个算法把一个字节的数据放入三个名单:

白名单:

9 (TAB), 10 (LF), 13 (CR), 32..255

灰名单:

7 (BEL), 8 (BS), 11(VT), 12 (FF), 26 (SUB), 27 (ESC)

黑名单:

0..6, 14..31

 

判断的方法是:

如果一个文件包含至少一个白名单中的字节而且不包含一个黑名单中的字节,那么它就是文本文件,否则它是二进制文件。

算法原理很简单,凡是出现了黑名单中的字节的文件几乎只可能是二进制文件,而普通的文本文件几乎不可能出现这些字节,即使是Unicode等多字节编码也会设置高位的标记字符以实现兼容ASCII。

代码如下:

 

 

 

 

参考资料:<<A Fast Method for Identifying Plain Text Files>> by Cosmin Truta updated in 2006-May-28

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值