轉嘉士伯的Java小屋寫的關於編碼的文章(三)網頁檔案的編碼

來源:互聯網
上載者:User

接著上節的思路說,一個網頁要想在瀏覽器中能夠正確顯示,需要在三個地方保持編碼的一致:網頁檔案,網頁編碼聲明和瀏覽器編碼設定。

(瀏覽器顯示網頁時應該是這樣選擇編碼的:下載網頁讀取charset中的網頁編碼聲明,根據該編碼聲明來選擇正確的編碼來顯示;如果沒有讀取到charset, 那就選擇系統預設的編碼來顯示網頁。中文XP預設是gbk的,如果我們的網頁編碼是utf-8.但又沒有說明charset,那顯示的時候會怎樣呢?呵呵.瀏覽器還有這樣一種好習慣,即它會盡量猜測使用什麼編碼查看最合適。)

首先是網頁檔案本身的編碼,即網頁檔案在被建立的時候使用什麼編碼來儲存。這個完全取決於建立該網頁的人員使用了什麼編碼儲存,而進一步的取決於該人員使用的作業系統。例如我們使用的中文版WindowsXP系統,當你建立一個文字檔,寫入一些內容,並按下ctrl+s進行儲存的那一刻,作業系統就替你使用GBK編碼將檔案進行了儲存(沒有使用UTF-8,也沒有使用UTF-16)。而使用了英文系統的人,系統會使用ISO-8859-1進行儲存,這也意味著,在英文系統的檔案中如果輸入一個漢字,是無法進行儲存的(當然,你甚至都無法輸入)。

一個在建立XML檔案時(建立HTML的時候倒很少有人這麼做)常見的誤解是以為只要在頁面的encoding部分聲明了UTF-8,則檔案就會被儲存為UTF-8格式。這實在是……怎麼說呢,不能埋怨大家。實際上XML檔案中encoding部分與HTML檔案中的charset中一樣,只是告訴“別人”(這個別人可能是瀏覽你的頁面的人,可能是瀏覽器,也可能是處理你頁面的程式,別人需要知道這個,因為除非你告訴他們,否則誰也猜不出你用了什麼編碼,僅通過檔案的內容判斷不出使用了什麼編碼,這是真的)這個檔案使用了什麼編碼,唯獨作業系統不會搭理,它仍然會按自己預設的編碼方式儲存檔案(再一次的,在我們的中文WindowsXP系統中,使用GBK儲存)。至於這個檔案是不是真的是encoding或者charset所聲明的那種編碼儲存的呢?答案是不一定!
例如新浪的頁面就“聲稱”他是用GB2312編碼儲存的,但實際上卻是GBK,也有無數的二把刀程式員用系統預設的GBK儲存了他們的XML檔案,卻在他們的encoding中信誓旦旦的說是UTF-8的。
這就是我們所說的第二個位置,網頁編碼聲明中的編碼應該與網頁檔案儲存時使用的編碼一致。

而瀏覽器的編碼設定實際上並不嚴格,就像我們第三節所說的那樣,在瀏覽器中選擇使用GB2312來查看,它實際上仍然會使用GBK進行。而且瀏覽器還有這樣一種好習慣,即它會盡量猜測使用什麼編碼查看最合適。

(我在用vs2008.在web.config中如果設定全球化utf-8,那儲存檔案例如js.css.html等,就會自動儲存為utf-8編碼。而用記事本預設儲存,如果不手動選擇編碼,那就會儲存為gb2312.這也是可能發生亂碼的一個原因吧。)

我要重申的是,網頁檔案的編碼和網頁檔案中聲明的編碼保持一致,這是一個極好的建議(值得遵循,會與人方便,與己方便),但如果不一致,只要網頁檔案的編碼與瀏覽器的編碼設定一致,也是可以正確顯示的。
例如有這樣一個頁面,它使用GBK儲存,但聲明自己是UTF-8的。這個時候用瀏覽器開啟它,首先會看到亂碼,因為這個頁面“告訴”瀏覽器用UTF-8顯示,瀏覽器會很尊重這個提示,於是亂碼一片。但當手工把瀏覽器設為GBK之後,顯示正常。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.