在工做中少不了碰到文件亂碼的問題,面對這麼多的中文漢字編碼,真不知該選哪一個好,不如完全搞清楚,讓亂碼灰飛煙滅;如下介紹文本編碼中經常使用到的幾種:iso8859-一、GDK/GB23十二、ANSI、unicode 以及UTF ;程序員
iso8859-1 一般叫作Latin-1,屬於單字節編碼,最多能表示的字符範圍是0-255,應用於英文系列。好比,字母a的編碼爲0x61=97。 很明顯,iso8859-1編碼表示的字符範圍很窄,沒法表示中文字符。可是,因爲是單字節編碼,和計算機最基礎的表示單位一致,因此不少時候,仍舊使用iso8859-1編碼來表示。並且在不少協議上,默認使用該編碼。好比,雖然"中文"兩個字不存在iso8859-1編碼,以gb2312編碼爲例,應該是"d6d0 cec4"兩個字符,使用iso8859-1編碼的時候則將它拆開爲4個字節來表示:"d6 d0 ce c4"(事實上,在進行存儲的時候,也是以字節爲單位處理的)。windows
GB2312是漢字的國標碼,是簡體中文的字符集編碼;專門用來表示漢字,是雙字節編碼,而英文字母和iso8859-1一致(兼容iso8859-1編碼)。
蘋果OS以GB2312爲基本漢字編碼;
GBK 是 GB2312的擴展,除了兼容GB2312外,它還能顯示繁體中文,還有日文的假名;
Windows 95/98以GBK爲基本漢字編碼、但兼容支持GB2312。網絡
不一樣的國家和地區制定了不一樣的標準,由此產生了 GB2312, BIG5, JIS 等各自的編碼標準。這些使用 2 個字節來表明一個字符的各類漢字延伸編碼方式,稱爲 ANSI 編碼。在簡體中文操做系統下,ANSI 編碼表明 GB2312 編碼,在日文操做系統下,ANSI 編碼表明 JIS 編碼。(BIG5:臺灣標準)
不一樣 ANSI 編碼之間互不兼容,當信息在國際間交流時,沒法將屬於兩種語言的文字,存儲在同一段 ANSI 編碼的文本中。
ANSI編碼表示英文字符時用一個字節,表示中文用兩個字節,而unicode無論表示英文字符仍是中文都是用兩個字節來表示。編碼
Unicode(統一碼、萬國碼、單一碼、標準萬國碼)是業界的一種標準,它可使電腦得以呈現世界上數十種文字的系統。spa
大概來講,Unicode 編碼系統可分爲編碼方式和實現方式兩個層次。
Unicode 的編碼方式與 ISO 10646 的通用字符集(Universal Character Set,UCS)概念相對應,目前實際應用的 Unicode 版本對應於 UCS-2,使用16位的編碼空間。也就是每一個字符佔用2個字節。這樣理論上一共最多能夠表示 2 即 65536 個字符。基本知足各類語言的使用。實際上目前版本的 Unicode 還沒有填充滿這16位編碼,保留了大量空間做爲特殊使用或未來擴展。操作系統
Unicode 的實現方式不一樣於編碼方式。一個字符的 Unicode 編碼是肯定的。可是在實際傳輸過程當中,因爲不一樣系統平臺的設計不必定一致,以及出於節省空間的目的,對 Unicode 編碼的實現方式有所不一樣。Unicode 的實現方式稱爲Unicode轉換格式(Unicode Translation Format,簡稱爲 UTF)。
目前通用的實現方式是 UTF-16小尾序(BOM)、UTF-16大尾序(BOM)和 UTF-8。在微軟公司Windows XP操做系統附帶的記事本中,「另存爲」對話框能夠選擇的四種編碼方式除去非 Unicode 編碼的 ANSI 外,其他三種「Unicode」、「Unicode big endian」和「UTF-8」即分別對應這三種實現方式。.net
注:一般咱們看到的編碼選項中,和UTF-8放在一塊的「Unicode編碼」指的是UTF-16 小端編碼;設計
UTF-8是UNICODE的一種變長字符編碼,由Ken Thompson於1992年建立。
UTF-8, 8bit編碼, ASCII不做變換, 其餘字符作變長編碼, 每一個字符1-3 byte(英文字母用一個字節,漢字使用3個字節),有如下優勢:code
UTF8 和 UTF16 都是變長表示的,歐美程序員會以爲太浪費,由於歐美字符 0x0000 - 0x00FF 就搞定了,UTF8 最小變長是 1 個字節,而 UTF16 變長是 2 個字節,
utf-8 與 uft-16 表示 'a' a的ascii是0X61
utf-8爲[0X61]
uft-16 [0x00,0X61]orm
注意,雖說utf-8是爲了使用更少的空間而使用的,但那只是相對於utf-16編碼來講,若是已經知道是漢字,則使用GB2312/GBK無疑是最節省的。
windows系統下將文件用記事本打開,而後文件--另存爲 在對話框最下面的編碼那一欄就有文件對應的編碼。
代碼開發常常用到source insight,這個軟件的註釋是支持ANSI的代碼編寫、可是若是是UTF-8的中文(在Linux下默認的生成文件,編碼都是UTF-8編碼的),在source insight下顯示的就是亂碼文件;
解決的方法詳見附錄參考文章;
1.關於編碼ansi、GB23十二、unicode與utf-8的區別
http://blog.csdn.net/chruan/article/details/8812110
2.source insight中文註釋亂碼問題的解決方案
http://blog.csdn.net/ccf19881030/article/details/8987759
3.Source Insight完美轉換UTF-8 到 GB2312
http://blog.csdn.net/e0sys1/article/details/4670188
4.UNICODE wiki
http://www.baike.com/wiki/Unicode
Posted by: 大CC | 31JUL,2014
博客:blog.me115.com [訂閱]
微博:新浪微博