今天用eclipse(其實是Aptana)寫一個簡單測試網頁時,用瀏覽器打開網頁發現亂碼,HTML頁面頭是這么寫的:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
注意上面的<meta>標簽,即我告訴瀏覽器當前頁面是用GBK編碼的。本以為一切都沒問題,但是用瀏覽器打開就出現亂碼了,如下:
為什么會這樣呢?
我想了一會覺得應該查看下Eclipse默認的字符編碼格式,通過Windows->Preferences->Workspace->Text file encoding打開,如下:
可以看到我的eclipse默認設置文件編碼格式為UTF-8。
那這個跟亂碼有關系嗎?
當然有關系,問題恰出於此。下面我來仔細說下。
1、eclipse設定了文本文件默認編碼方式為UTF-8,所以我編寫的HTML頁面中的中文也都是按UTF-8進行編碼的 2、<meta>頭標簽設置了charset屬性,只是告訴瀏覽器當前HTML頁面是按GBK編碼的 3、瀏覽器解析頁面時,發現<meta>標簽指定了字符編碼為gbk。而根據第一步我們知道HTML頁面實際上是按UTF-8編碼的,又GBK編碼和UTF-8編碼不是兼容的,所以自然就出現亂碼了
真相大白后,發現原理很簡單。我只需要修改<meta>標簽的charset值為utf-8,就沒有亂碼了。這還能解釋各位包括我自己以前遇到的一個現象:從網上下別人的代碼文件,拷貝到eclipse下出現亂碼。原因也是別人的代碼文件的編碼方式和eclipse默認的文件編碼方式不一致。
這個例子給我們的啟發是:
要想最大可能地避免亂碼,最簡單的方法是保證所有可以設置的地方編碼一致。比如這里我設置<meta>標簽的charset屬性值為utf-8就不會出現這種問題了。
順便再提下,我們也可以單獨為每個工程項目設置字符編碼,如下(Sudoku項目):
而且也可以單獨為某個文件設置字符編碼格式:
eclipse的全局字符編碼、項目的字符編碼、某個文件的字符編碼,優先級由低到高。