C#文件编码检测:轻松解析文本文件编码及应用实例

作者:微信公众号:【架构师老卢】
12-18 12:19
194

概述:在C#中,通过`StreamReader`和`Encoding`类可检测文本文件编码。示例代码演示了读取文件并通过BOM检测文件编码,支持UTF-8、UTF-16等。此方法可用于处理不同编码的文本文件。

在C#中检测文本文件的编码可以使用Encoding类及StreamReader类。以下是一个示例,演示如何检测文本文件的编码:

using System;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        string filePath = "路径\\到\\你的\\文件.txt";

        // 读取文件内容
        string content = ReadFile(filePath);

        // 检测文件编码
        Encoding encoding = DetectFileEncoding(filePath);

        Console.WriteLine($"文件编码:{encoding.EncodingName}");
    }

    static string ReadFile(string filePath)
    {
        string content = "";

        try
        {
            using (StreamReader reader = new StreamReader(filePath, true))
            {
                content = reader.ReadToEnd();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"读取文件时发生错误:{ex.Message}");
        }

        return content;
    }

    static Encoding DetectFileEncoding(string filePath)
    {
        byte[] buffer = new byte[4096];

        try
        {
            using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                fileStream.Read(buffer, 0, buffer.Length);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"读取文件时发生错误:{ex.Message}");
            return null;
        }

        return DetectEncoding(buffer);
    }

    static Encoding DetectEncoding(byte[] buffer)
    {
        // BOM(字节顺序标记)检测
        if (buffer.Length >= 2 && buffer[0] == 0xFF && buffer[1] == 0xFE)
        {
            return Encoding.Unicode; // UTF-16 little-endian
        }
        else if (buffer.Length >= 2 && buffer[0] == 0xFE && buffer[1] == 0xFF)
        {
            return Encoding.BigEndianUnicode; // UTF-16 big-endian
        }
        else if (buffer.Length >= 3 && buffer[0] == 0xEF && buffer[1] == 0xBB && buffer[2] == 0xBF)
        {
            return Encoding.UTF8; // UTF-8
        }
        else
        {
            // 默认为 ANSI 编码
            return Encoding.Default;
        }
    }
}

上述代码中,ReadFile方法用于读取文件内容,而DetectFileEncoding方法通过读取文件头部来检测文件编码。DetectEncoding方法根据文件头的BOM(字节顺序标记)来判断文件编码。检测完成后,返回Encoding对象。

源代码获取:公众号回复消息【code:71599

相关代码下载地址
重要提示!:取消关注公众号后将无法再启用回复功能,不支持解封!
第一步:微信扫码关键公众号“架构师老卢”
第二步:在公众号聊天框发送code:71599,如:code:71599 获取下载地址
第三步:恭喜你,快去下载你想要的资源吧
阅读排行