星期三, 6月 06, 2007

中文網頁編碼問題

假設在 .vimrc 裡設定了下面幾行

" vim 內部使用的編碼
set encoding=utf-8
" 在終端環境使用 vim 時使用的編碼
set termencoding=utf-8
" vim 開啟文件時根據 fileencodings 所指定的順序來猜文件的編碼
set fileencodings=ucs-bom,utf-8,sjis,prc,big5,latin1
" vim 存檔時使用的編碼

set fileencoding=utf-8

這時我們所寫的中文網頁存檔後,都會是以 utf-8 編碼所存的…….嗎?

答案是不一定….

我們可以再以 vim 打開該檔案,然後在命令列下 :set

找一個叫 fileencoding=xxxx 的設定值

如果 xxxx=utf-8 則它真的是以 utf-8 編碼所存的,

如果 xxxx=big5 則它是以 big5 編碼所存的……

這是因為 fileencodings 的設定,vim 會先從 fileencodings 所列的編碼從頭開始找,一遇到符合的就用該編碼做為接下來處理的編碼,這時我們可以再設定一次

:set fileencoding=utf-8

再次存檔後,它就會以 utf-8 存檔了

確定了網頁檔案內容的編碼後, 接下來是 browser 能不能知道該網頁是否為 utf-8 了

mozilla/firefox/iceweasel 可以演算法找出網頁是以什麼編碼所儲存的,故可正確顯示。

IE 似乎沒有類似的機制,所以我們需在網頁中加註 meta data,告訴它網頁是什麼編碼。

(meta qeuiv="Content-Language" content="zh-tw")

(meta http-equiv="Content-Type" content="text/html; charset=utf-8")

(請將 '(' 及 ')' 換成 '<' 及 '>')

萬一在加了上面兩行後,原本的中文卻變成了亂碼,那極有可能你的檔案不是以 utf-8 存檔的。

在 linux 上有 iconv ,在 windows 上有 convertz

兩者都可以用來批次轉檔案的編碼。

沒有留言: