編碼 | 大小 | 支持語言 |
ASCII | 1個字節 | 英文 |
Unicode | 2個字節(生僻字4個) | 所有語言 |
UTF-8 | 1-6個字節,英文字母1個字節,漢字3個字節,生僻字4-6個字節 | 所有語言 |
具體解釋:
最早只有127個字母被編譯到計算機里,也就是大小寫字母、數字和一些符號,這個編譯表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。
但是要處理中文顯然一個字節是不夠的,至少需要2個字節,而且還不能和ASCII編碼沖突,所以,中國制定了GB2312編碼,用來把中文編進去。
你可以想得到的是,全世界有上百種語言,日本把日文編到Shift_JIS里,韓國把韓文編到Euc_kr里,各國有各國的標准,就會不可避免的出現沖突,結果就是,在多語言混合的文本中,顯示出來就會有亂碼。
因此,Unicode應運而生。Unicode把所有的語言都統一到一套編碼里,這樣就不會再有亂碼問題了。
Unicode標准也在不斷發展,但最常用的是用兩個字節表示一個字符(偏僻字符需要4個字符)。現代操作系統和大多數編程語言都直接支持Unicode。
新的問題又出現了:如果統一成Unicode編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全是英文的話,用Unicode編碼比ASCII編碼需要多一倍的存儲空間,在存儲和傳輸上就十分不划算。
所以,本着節約的精神,又出現了把Unicode編碼轉化為“可變長編碼”的UTF-8編碼。UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1-6個字節,常用的英文字母被編碼成1個字節,漢字通常是3個字節,只有很生僻的字符才會被編碼成4-6個字節。如果你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間。
UTF-8有個額外的好處,就是ASCII編碼實際上可以被看成是UTF-8的編碼的一部分,所以,大量只支持ASCII編碼的歷史遺留軟件可以在UTF-8編碼下繼續工作。
字符集與字符編碼:
1、字符集:
字符集只是一個規則集合的名字,字符集=字庫表、編碼字符集、字符編碼
2、字庫表:
字庫表是一個相當於所有可讀或者可顯示字符的數據庫,字庫表決定了整個字符集能夠展現表示的所有字符的范圍。
3、編碼字符集:(簡稱字符集,如Unicode、ASCII)
編碼字符集,用一個編碼值code point來表示一個字符(即該字符在字庫表中的位置),這個值稱為字符對應於編碼字符集的序號。
4、字符編碼:
字符編碼,是編碼字符集和實際存儲數值之間的轉換關系。字符,是根據字符編碼方案轉換為一個二進制數值存儲在計算機中的。
所以,字符編碼是定義在字符集上的映射字符。(字符:計算機中的實際存儲值)
注意:編碼字符集Unicode,有UTF-8、UTF-16、UTF-32等多種字符編碼。