1. 程式人生 > >IntelliJ IDEA的檔案編碼處理

IntelliJ IDEA的檔案編碼處理

因為要寫這篇文章,所以查詢了一下些關於編碼的知識,不對之處希望能指出來 :)。編碼主要經歷三個階段:ASCII、ANSI和Unicode。
    ASCII大家都知道,就是以一個位元組的低7位表示字元,這樣可以表達128個字元,通常就是我們所說的英文字母和符號;
    ANSI標準利用兩個擴充套件ASCII字元來表達非英文字元,這樣可以表達的擴充套件字元數就到達了14位,即16384個字元。針對ANSI,每個國家(地區)有自己的編碼規範,對中文來說就是GB2312,GBK和GB18030,臺灣的BIG5,日文的Shift-JIS等,這些都是對ANSI的具體擴充套件。如果你編寫一個文字檔案,指定為GBK,那麼你開啟該檔案的時候必須指明其正確的編碼方式,否則會出現亂碼。不同 ANSI 編碼之間互不相容,當資訊在國際間交流時,無法將屬於兩種語言的文字,儲存在同一段 ANSI 編碼的文字中,也就是GBK編碼的檔案中不可能出現日文,否則開啟該檔案時就會出亂碼。
   UNICODE 使用兩個位元組對世界上幾乎所有的語言進行編碼(0x0000-0xFFFF),它可以表達的字元數量為16位,即65536個字元,每種語言的程式碼段不同,兩個位元組所表達的字元是唯一的,所以不同語種可以共存於文字中。UNICODE只是指定了編碼,沒有指定傳輸方式( big endian)問題,所以派生了UTF(UNICODE Transformation Format),所以UTF-8和UTF-16都是UNICODE的一種編碼方式。對於UNICODE檔案來說,通常檔案內容的頭兩個位元組來表明其是UNICODE,如FF FE 表示為UTF-8編碼,其情況均表示為ANSI,這也是為何有IDEA的“Autodetect UTF-encoded files“功能的原因。由於UTF-8不需要處理big endian問題,因此UTF-8是最常用的UNICODE編碼方式。
   亂碼問題:由於UNICODE和ANSI所處理的字元的程式碼不一樣,而且各個國家對ANSI碼的解釋也不一樣,所以UNICODE和ANSI之間、不同國家的ANSI之間的不正確使用就導致了亂碼,如開啟一個位元組流,如果設定的解析編碼不正確,亂碼就出現啦,所以要搞清楚你使用的編碼方式,這樣就不會出現亂碼。
   扯了這麼多,我們看一下IDEA提供哪些處理編碼的功能。IDEA中lossy encoding(中文不知道如何翻譯:易損的編碼?)究竟發揮怎麼樣的作用咧?lossy encoding可以把不應該出現在該檔案中的字元指出來,提示你進行修正。如在us-ascii編碼的檔案中,出現中文或日文可不可以的;同樣在GBK編碼的檔案中出現ANSI日文或UTF字元也是不可以的。
   但是在實際的開中,有一些檔案是能描述自身編碼的,如xml和html。xml可以通過encoding來指定編碼方式,而html通過content-type方式來指定,如果開啟這些檔案,就會呼叫相應的編碼方式來處理。在開發中,我們通常會從一種編碼方式轉換到另一種編碼,在IDEA中 ,如果你將這些自身帶有編碼資訊的檔案的編碼宣告改變的話,對應的檔案編碼也會改變。如將一個utf-8的xml檔案的encoding更改為GBK,那麼檔案的編碼也會自動進行轉換並進行儲存,同樣修改html的content-type或jsp的content-type都會引發檔案的編碼自動轉換,這樣的處理對編碼轉換非常有好處,在google上你可以搜尋到很多編碼轉換的工具,但這一切IDEA都在自動幫你搞定。如果你想快速檢視一個檔案的編碼,最好安裝File Info外掛,按下Ctrl+F10馬上就可以瞭解檔案的編碼方式。
    最後稍微聊一下專案的編碼,如果你的專案是國際化的話,最好選擇utf-8,因為可以融合多個語言,這也是為何很多論壇都採用utf-8編碼(不同語言的人都會發帖),而Rails將utf-8設為預設。其他情況請選擇適當的ANSI編碼,同時也要考慮和utf-8直接的轉換,如Ajax等。在最新的IDEA 8.0 EAP中,專案級別的編碼可以被指定,而且各個檔案可以指定相關的編碼,檔案編碼處理的功能更強。希望這些介紹能對檔案編碼瞭解和實際開發有一定的幫助。

新建工程時----在General中,把File   Encoding和Properties   Files都設定成utf-8編碼。

頁面加上 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

IDEA會自動轉換成相應的編碼

小張網校

www.xiaozhangwx.com
-IT程式設計線上學習交流平臺
-更多的小夥伴等待你的加入


最新視訊課程:
2048遊戲的開發