BOM頭的去掉方法

類似WINDOWS自帶的記事本等軟件,在保存一個以UTF-8編碼的文件時,會在文件開始的地方插入三個不可見的


字符(0xEF 0xBB 0xBF,即BOM)。它是一串隱藏的字符,用於讓記事本等編輯器識別這個文件是否以UTF-8編


碼。對於一般的文件,這樣並不會產生什麼麻煩。但對於 PHP來說,BOM是個大麻煩。
  PHP並不會忽略BOM,所以在讀取、包含或者引用這些文件時,會把BOM作爲該文件開頭正文的一部分。根


據嵌入式語言的特點,這串字符將被直接執行(顯示)出來。由此造成即使頁面的 top padding 設置爲0,也


無法讓整個網頁緊貼瀏覽器頂部,因爲在html一開頭有這3個字符呢!
================================================================================================


=
window編輯器如果保存爲utf8文件就會幫你加上BOM頭,以告訴其他編輯器以utf8來顯示字符
但是在網頁上並不需要添加BOM頭識別,因爲網頁上可以使用 head頭 指定charset=utf8告訴瀏覽器用utf8來


解釋.但是你用window自動的編輯器,編輯,然後有顯示在網頁上這樣就會顯示出0xEF 0xBB 0xBF這3個字符。
這樣網頁上就需要去除0xEF 0xBB 0xBF,可以使用editplus 選擇不帶BOM的編碼,這樣就可以去除了




解決方法:

--方法一


  public static string GetUTF8String(byte[] buffer)
        {
            if (buffer == null)
                return null;


            if (buffer.Length <= 3)
            {
                return Encoding.UTF8.GetString(buffer);
            }


            byte[] bomBuffer = new byte[] { 0xef, 0xbb, 0xbf };


            if (buffer[0] == bomBuffer[0]
                && buffer[1] == bomBuffer[1]
                && buffer[2] == bomBuffer[2])
            {
                return new UTF8Encoding(false).GetString(buffer, 3, buffer.Length - 3);
            }


            return Encoding.UTF8.GetString(buffer);
        }


var utf8WithoutBom = new System.Text.UTF8Encoding(false);
var sink = new StreamWriter("Foobar.txt", false, utf8WithoutBom)





--方法二


 public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, 


HttpContent content,
            TransportContext transportContext)
        {
            var serializer = JsonSerializer.Create(jsonSerializerSettings);
            var utf8OutBOM=new UTF8Encoding(false);//解決方法
            return Task.Factory.StartNew(() =>
            {
                using (var streamWriter = new StreamWriter(writeStream, utf8OutBOM))
                {
                    using (var jsonTextWriter = new JsonTextWriter(streamWriter))
                    {
                        serializer.Serialize(jsonTextWriter, value);
                    }
                }
            });
        }
發佈了43 篇原創文章 · 獲贊 44 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章