C#·对于BOM头之完全解决方案

阅文时长| 0.46分钟字数统计| 798.4字符
主要内容| 1、引言&背景 2、使用C#写入带有/不带有BOM头的文件? 3、对于读取文件时,避免BOM头造成的异常。 4、声明与参考资料
『C#·对于BOM头之完全解决方案』
编写人| SCscHero编写时间| 2021/3/13 PM10:38
文章类型| 系列完成度| 待完善
座右铭每一个伟大的事业,都有一个微不足道的开始。

a) 应对问题

  1. 如何使用C#写入带有/不带有BOM头的文件?
  2. 如何使用C#判断文件是否有BOM头?

b) 应用场景

  1. 处理BOM头的文件。
  2. 对于读取文件时,避免BOM头造成的异常。

c) 预备知识

  1. 需要了解 BOM头是什么?

完成度:100%

使用有参构造函数,来确定是否使用BOM头。如下代码:

            var utf8WithoutBom = new System.Text.UTF8Encoding(false);//使用构造函数布尔参数指定是否含BOM头,示例false为不含。
            var utf8WithBom = new System.Text.UTF8Encoding(false);//使用构造函数布尔参数指定是否含BOM头,示例true为含。
            using (var sink = new StreamWriter("WithoutBom.txt", false, utf8WithoutBom))
            {
                sink.WriteLine("Hello,SCscHero");
            }
            using (var sink = new StreamWriter("WithBom.txt", false, utf8WithBom))
            {
                sink.WriteLine("Hello,SCscHero");
            }

完成度:100%

根据BOM头的特性,我们可以使用判断字节流的方式。如下代码:

            var fileByte = System.IO.File.ReadAllBytes(@"TestBom.txt");
            var isBom = isBomHeader(fileByte);
            Console.WriteLine("是否含有Bom头:{0}",isBom);

可以将判断是否是BOM头的代码封装成一个公用方法,如下代码:

        public static bool isBomHeader(byte[] bs)
        {
            int len = bs.Length;
            if (len >= 3 && bs[0] == 0xEF && bs[1] == 0xBB && bs[2] == 0xBF)
            {
                return true;
            }
            return false;
        }

完成度:100%

原创博文,未经许可请勿转载。

如有帮助,欢迎点赞、收藏、关注。如有问题,请评论留言!如需与博主联系的,直接博客私信SCscHero即可。