起因:
做項目的時候,需要根據條件數據生成靜態的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在單文件使用的情況下沒有問題,但是通過【文件引入】就會出現亂碼的情況
會出現【】這樣的亂碼,會在頁面中多出一處空白行,從而影響到頁面的佈局。
在網上找了很多的資料得到的信息如下:
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的編碼格式了。