如何通过首尾来判断是否为可读的字符格式文件?

本文介绍了一种通过检查文件头的字节序列来识别ASCII、UTF-8、UTF-16等文本文件格式的方法,包括BOM(ByteOrderMark)检测和null字符结尾的检查,以确定文件是否为可读文本文件。
摘要由CSDN通过智能技术生成

如何通过首尾来判断是否为可读的字符格式文件?
大部分情况下,读取文件的头几个字节来检查是否为文本文件,ASCII码的文本文件以0x00开头,UTF-16的文本文件以0xFF,0xFE开头,UTF-8的文本文件以0xEF,0xBB,0xBF开头。 检查是否以null字符结尾,这是文本文件的一个常见特征。
当然也有例外,但这是操作系统默认的常识。
下面展示一些 内联代码片

static bool IsTextFile(string filePath)  
    {  
        try  
        {  
            // 读取文件的头几个字节来检查是否为文本文件  
            // ASCII码的文本文件以0x00开头,UTF-16的文本文件以0xFF,0xFE开头,UTF-8的文本文件以0xEF,0xBB,0xBF开头。  
            // 如果是文本文件,则不会抛出异常,否则会抛出异常。  
            byte[] bytes = new byte[3];  
            using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))  
            {  
                stream.Read(bytes, 0, bytes.Length);  
            }  
              
            // 检查字节序列是否符合文本文件的开头  
            if (bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) // UTF-8 BOM  
                return true;  
            else if (bytes[0] == 0xFF && bytes[1] == 0xFE) // UTF-16 little-endian BOM  
                return true;  
            else if (bytes[0] == 0xFE && bytes[1] == 0xFF) // UTF-16 big-endian BOM  
                return true;  
            else if (bytes[0] == 0x00 && bytes[1] == 0x00 && bytes[2] == 0x00) // UTF-32 little-endian BOM  
                return true;  
            else if (bytes[0] == 0x00 && bytes[1] == 0x00 && bytes[2] == 0xFF && bytes[3] == 0xFE) // UTF-32 big-endian BOM  
                return true;  
            else if (bytes[bytes.Length - 1] != 0) // 检查是否以null字符结尾,这是文本文件的一个常见特征。  
                return true;  
        }  
        catch (Exception ex) // 如果在尝试读取文件时发生任何异常,则可能不是文本文件。  
        {  
            return false;  
        }  
        return false; // 如果以上所有条件都不满足,则可能不是文本文件。  
    }  
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值