UTF-8和UTF-8 BOM

起因:

做項目的時候,需要根據條件數據生成靜態的Html,下面是生成靜態的Html

 /// <summary>
        /// 生成靜態Html
        /// </summary>
        /// <param name="strHtml">html</param>
        /// <param name="path">網頁保存路徑</param>
        /// <param name="pageName">網頁名稱</param>
        /// <param name="success">生成狀態</param>
        private void GenerateHtml(string strHtml,string path,string pageName,out bool success)
        {
            string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;   //項目根目錄
            try
            {
                FileStream fs = new FileStream((baseDirectory + "/" + path + "/" + pageName), FileMode.Create);
                StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("UTF_8"));    //輸出的網頁編碼格式爲UTF-8 BOM
                sw.Write(strHtml);   //寫入Html
                sw.Close();          //關閉流
                fs.Close();
                success = true;
            }
            catch(IOException ex)
            {
                success = false;
            }
        }

生成的Html在單文件使用的情況下沒有問題,但是通過【文件引入】就會出現亂碼的情況

會出現【&#65279】這樣的亂碼,會在頁面中多出一處空白行,從而影響到頁面的佈局。

在網上找了很多的資料得到的信息如下:

1、Visual Studio 默認生成文件的編碼格式爲UTF-8 BOM 【byte order mark】也就是字節序標記

 顯然,現在要解決的問題是UTF-8和UTF-8 BOM編碼之間的轉換

以下是不提供BOM的編碼

Encoding utf8NoBom = new UTF8Encoding(false);
Encoding utf16NoBom = new UnicodeEncoding(false, false);
Encoding utf32NoBom = new UTF32Encoding(false, false);

所以把上面的編碼格式做下修改,生成的靜態頁面的編碼格式就是UTF-8

 /// <summary>
        /// 生成靜態Html
        /// </summary>
        /// <param name="strHtml">html</param>
        /// <param name="path">網頁保存路徑</param>
        /// <param name="pageName">網頁名稱</param>
        /// <param name="success">生成狀態</param>
        private void GenerateHtml(string strHtml,string path,string pageName,out bool success)
        {
            string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;   //項目根目錄
            try
            {
                FileStream fs = new FileStream((baseDirectory + "/" + path + "/" + pageName), FileMode.Create);
                Encoding utf8NoBom = new UTF8Encoding(false); //參數是否提供一個Unicode字節順序標記
                StreamWriter sw = new StreamWriter(fs, utf8NoBom);    //輸出的網頁編碼格式爲UTF-8 BOM
                sw.Write(strHtml);   //寫入Html
                sw.Close();          //關閉流
                fs.Close();
                success = true;
            }
            catch(IOException ex)
            {
                success = false;
            }
        }

現在生成的靜態頁面就是UTF-8的編碼格式了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章