The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

在 ASP.NET 中強迫輸出 BOM 字元的方式

我最近發現就算我的 ASP.NET 頁面是用 UTF-8 編碼(包含BOM字元)、或在頁面中設定 ResponseEncoding 為 UTF-8 編碼,最後輸出到瀏覽器的文件都一定不會有 BOM ( Byte-order mark ) 字元,這就很有可能造成 Browser 誤判網頁的編碼,我特別強調是「可能」會誤判而已,在我實際的工作經驗裡,瀏覽器在讀取沒有 BOM 字元的 UTF-8 網頁都沒出問題過,不過當我們選取【檢視 -> 原始檔】的時候,網頁內容被預設編輯器開啟的時候,編輯器就真的「很有可能」會誤判了,像我同事的 Notepad++ 在開啟網頁原始檔時,就幾乎全部變亂碼必須要手動切換到「編譯成 UTF-8 碼」才會變正常。(奇怪的是這些事總不會在我的電腦發生,不知道是不是我的電腦吃了我太多的口水所致)

 像我同事的 Notepad++ 在開啟網頁原始檔時,就幾乎全部變亂碼必須要手動切換到「編譯成 UTF-8 碼」才會變正常

而我的解決的方法是在 MasterPage 的 Page_PreRender 事件中強迫輸出 BOM 字元,問題就自然迎刃而解。

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    Response.BinaryWrite(new byte[] { 0xEF, 0xBB, 0xBF }); 
}

當然,你也可以直接寫在一般的頁面中,或也可以寫在 BasePage 類別中都可以。

相關連結