天天看點

【java】Java編碼字元集與字元集編碼入門(四) 網頁檔案的編碼

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

  • 系統對檔案的預設編碼

    首先是網頁檔案本身的編碼,即網頁檔案在被建立的時候使用什麼編碼來儲存。這個完全取決于建立該網頁的人員使用了什麼編碼儲存,而進一步的取決于該人員使用的作業系統。例如我們使用的中文版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進行。而且浏覽器還有這樣一種好習慣,即它會盡量猜測使用什麼編碼檢視最合适。

    我要重申的是,網頁檔案的編碼和網頁檔案中聲明的編碼保持一緻,這是一個極好的建議(值得遵循,會與人友善,與己友善),但如果不一緻,隻要網頁檔案的編碼與浏覽器的編碼設定一緻,也是可以正确顯示的。 

    例如有這樣一個頁面,它使用GBK儲存,但聲明自己是UTF-8的。這個時候用浏覽器打開它,首先會看到亂碼,因為這個頁面“告訴”浏覽器用UTF-8顯示,浏覽器會很尊重這個提示,于是亂碼一片。但當手工把浏覽器設為GBK之後,顯示正常。 

    說了以上四章節這麼多,後面我們就來侃侃Java裡的字元編碼,你會發現有意思且撓頭的事情很多,但一旦弄通,天下無敵(不過不要像東方不敗那樣才好)。