C#·對於BOM頭之完全解決方案


閱文時長 | 0.46分鍾 字數統計 | 798.4字符
主要內容 | 1、引言&背景 2、使用C#寫入帶有/不帶有BOM頭的文件? 3、對於讀取文件時,避免BOM頭造成的異常。 4、聲明與參考資料
『C#·對於BOM頭之完全解決方案』
編寫人 | SCscHero 編寫時間 | 2021/3/13 PM10:38
文章類型 | 系列 完成度 | 待完善
座右銘 每一個偉大的事業,都有一個微不足道的開始。

一、引言&背景   完成度:100%

a) 應對問題

  1. 如何使用C#寫入帶有/不帶有BOM頭的文件?
  2. 如何使用C#判斷文件是否有BOM頭?

b) 應用場景

  1. 處理BOM頭的文件。
  2. 對於讀取文件時,避免BOM頭造成的異常。

c) 預備知識

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

二、使用C#寫入帶有/不帶有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");
            }

三、對於讀取文件時,避免BOM頭造成的異常。   完成度: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即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM