近幾年,每每遇到關於Unicode,UTF-8之類的問題,總是需要花費半個小時回顧一下它們之間的關係,因爲我發現很多網上的資料都是通篇文字描述,我的想法很簡單,希望一目瞭然,下一次,希望一分鐘之內完成回顧,於是我使用的表格描述,算是對網上很多的資料的一個格式轉化和彙總吧!
字符集 |
|
Unicode Unicode(統一碼、萬國碼、單一碼)是計算機科學領域裏的一項業界標準,包括字符集、編碼方案等。
|
|
編碼方式 |
編碼說明(編碼方式是實現字符集計算機存儲的方式) |
ANSI |
ANSI是一種字符代碼,爲使計算機支持更多語言,通常使用 0x00~0x7f 範圍的1 個字節來表示 1 個英文字符。超出此範圍的使用0x80~0xFFFF來編碼,即擴展的ASCII編碼。
簡單的說,在英文編碼系統下,ANSI編碼代表ASCII,(American Standard Code for Information Interchange, “美國信息交換標準碼),在簡體中文系統下,ANSI編碼代表GB2312編碼;在日文操作系統下,ANSI編碼代表JS編碼。
|
UCS-2
|
UCS-2(Universal Character Set coded in 2 octets)顧名思義,UCS-2是用兩個字節來表示代碼點,其取值範圍爲 U+0000~U+FFFF。
BOM(Byte Order Mark): Unicode規範中定義,每一個文件的最前面分別加入一個表示編碼順序的字符(ZERO WIDTH NO-BREAK SPACE--零寬度非換行空格,用來存儲Big Endian(大頭)和Little Endian(小頭)標識),這個字符的名字叫做“零寬度非換行空格”(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。這正好是兩個字節,而且FF比FE大1。
特別強調,人們經常把UCS-2編碼直接稱爲Unicode編碼,所以特別容易混淆Unicode編碼和Unicode字符集的關係。
|
UTF-8
|
UTF-8(8-bit Unicode Transformation Format),隨着互聯網的普及,強烈要求出現一種統一的編碼方式。UTF-8就是在互聯網上使用最廣的一種unicode的實現方式。其他實現方式還包括UTF-16和UTF-32,不過在互聯網上基本不用。重複一遍,這裏的關係是,UTF-8是Unicode的實現方式之一。 |
UTF-16 |
不做過多介紹,2字節或者4字節。 |
UTF-32 |
不做過多介紹,定長4字節。 |
計算機系統通用的字符編碼工作方式:
在計算機內存中,統一使用Unicode編碼,當需要保存到硬盤或者需要傳輸的時候,就轉換爲UTF-8編碼。
用記事本編輯的時候,從文件讀取的UTF-8字符被轉換爲Unicode字符到內存裏,編輯完成後,保存的時候再把Unicode轉換爲UTF-8保存到文件:
瀏覽網頁的時候,服務器會把動態生成的Unicode內容轉換爲UTF-8再傳輸到瀏覽器:
所以很多網頁的源碼上會有類似<meta charset="UTF-8" />的信息,表示該網頁正是用的UTF-8編碼。