帶簽名即檔案頭含BOM資訊(三個位元組),不帶則沒有。
帶了的好處是,只要支援多編碼的編輯器都能正確識別出檔案編碼。
微
軟在自己的UTF-8格式的文字檔之前加上了EF BB BF三個位元組,
windows上面的notepad等程式就是根據這三個位元組來確定一個文字檔是ASCII的還是UTF-8的, 然而這個只是微軟暗自作的標記,
其它平台上並沒有對UTF-8文字檔做個這樣的標記。
區分UTF-8檔案是否含有BOM方法:
1,用UltraEdit-32開啟檔案,切換到十六進位編輯模式,察看檔案頭部是否有EF BB BF;
2,用Dreamweaver開啟,察看頁面屬性,看“包括Unicode簽名BOM"前面是否有個勾;
3,用Windows的記事本開啟,選擇 “另存新檔",看檔案的預設編碼是UTF-8還是ANSI,如果是ANSI則不帶BOM。
去掉檔案中UTF-8格式BOM方法:
使用UlterEdit開啟, 切換到十六進位編輯模式,把最前面三個位元組(就是那該死的 EF BB BF)替換為20(空格ASCII碼值),儲存(注意關閉儲存時自動備份的功能),再切換到預設編輯模式,把最前面的三個空格去掉就可以了。
當帶簽名的UTF-8編碼內容被瀏覽器解析時,瀏覽器直接根據簽名即可判斷出使用UTF-8編碼來進行解析,當不帶簽名時,瀏覽器會根據內容的編碼來進行判別。簡而言之,帶簽名的將更容易被瀏覽器以正確的編碼方式進行解析。
最近開發的過程中碰到一個很鬱悶的問題,一個網站中即有.aspx頁面,也有.shtml頁面,它們都引用一個公用的標頭檔,例:<!--#include file="Html/header.htm"-->,這時問題來了。
1> .aspx、.shtml、header.htm頁面都採用utf-8帶簽名編碼,此時.aspx頁面正常,.shtml頁面頂部多出一片空白部分
2> .aspx、.shtml頁面採用utf-8帶簽名編碼,header.htm採用utf-8不帶簽名編碼,此時.shtml頁面正常,.aspx頁面出現亂碼
3> .aspx、.shtml、header.htm頁面採用utf-8不帶簽名編碼,web.config中設定網站編碼為utf-8(此項很重要,如果不配置,會出現亂碼),此時一切正常
說到這兒,也許大家認為按照第三種方式問題就解決了,其實不然,大家知道,VS的預設編碼是UTF-8帶簽名的,之所以採用這種編碼自然是有它的好處的,文章最開始已經對簽名與不簽名的區別進行描述了,顯而易見,帶簽名編碼是主流。
最
後總結:到底是什麼原因導致帶簽名的.shtml引用一個帶簽名的html標頭檔時會出現上面多出一段空白的現象,最後發現問題之所在,IIS中解
析.shtml的DLL為C:\WINDOWS\system32\inetsrv\ssinc.dll,而解析.aspx的DLL為C:
\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll,由於兩個DLL在解析
utf-8帶簽名編碼檔案時的差異,導致了上面問題的出現。
如果碰到上述問題怎麼解決呢?兩種解決方案,第一:弄兩個頭部引用檔案(編碼分別為utf-8及utf-8帶簽名),分別應用於.ASPX(utf-8帶簽名)及.SHTML(UTF-8);第二:將所有頁面均使用.aspx尾碼。
轉自:
http://www.cnblogs.com/Impulse/archive/2013/04/15/3022113.html