2009年1月13日

讀取UTF-8的網頁卻出現一片空白或亂碼?

問題】瀏覽器讀取網頁時,畫面總是一片空白或亂碼,需更改瀏覽器的編碼方式、重新整理,
才會變正常?
解決方式
  1. 確認程式檔案是否儲存為正確的編碼?如UTF-8。
  2. 確認檔案開頭是否已加入正確的metadata標籤:
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    此行需放在「<title>網頁標題</title>」之前
  3. 查看Apache的httpd.conf設定檔內,是否有「AddDefaultCharset」的參數設定?
    若有請設為null:「AddDefaultCharset null
原因】(以下為轉貼)
UTF-8 是三個位元組一個漢字,而普通的 BIG5 是兩個,
結果把 UTF-8 當成 BIG5 解析的時候會出現一個半漢字的情況,
而那半個漢字會和 </title> 的 < 結合成一個亂碼字,
導致 IE 無法讀完<title>之前有連續的奇數個全形字符。

如果使用的是Mozilla、Mozilla Firefox、Sarafi等其他目前流行的瀏覽器,通常就不會有這樣的問題。
如果您在Windows作業系統上,使用Internet Explorer瀏覽器的話,往往會出現這樣的狀況:
在瀏覽使用UTF-8編碼製作的中文網頁時,瀏覽器並不能夠自動偵測網頁的編碼方式,
從原本預設的語系編碼(例如Big5正體中文等),切換成改以UTF-8編碼,
結果畫面上就是一片空白,什麼都沒有,即使在網頁當中,
已經加上了特別標明內文語系的metadata標籤:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 也還是一樣。

如果說,在<head>當中,排在最前面的是像網頁標題<title></title>標籤,
當中就出現了UTF-8中文,就很容易造成在瀏覽器中畫面一片空白,
或許是因為Internet Explorer會一開始就用預設的語系解讀、分析網頁,
而在標題的地方遇到UTF-8字元,就解讀錯誤,而不會繼續往下讀,
讀到meta標籤,才讀出這個網頁是以UTF-8編碼。
所以,</head>的部份,把"Content-Type"放在最前面,便可以解決這樣的問題了。