字符編碼(Unicode,UTF-8) 必須通俗易懂

 近幾年,每每遇到關於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。
如果一個文本文件的頭兩個字節是FE FF,就表示該文件採用大頭方式;如果頭兩個字節是FF FE,就表示該文件採用小頭方式。

 

特別強調,人們經常把UCS-2編碼直接稱爲Unicode編碼,所以特別容易混淆Unicode編碼和Unicode字符集的關係。

 

UTF-8

 

UTF-8(8-bit Unicode Transformation Format),隨着互聯網的普及,強烈要求出現一種統一的編碼方式。UTF-8就是在互聯網上使用最廣的一種unicode的實現方式。其他實現方式還包括UTF-16和UTF-32,不過在互聯網上基本不用。重複一遍,這裏的關係是,UTF-8Unicode的實現方式之一。
UTF-8最大的一個特點,就是它是一種變長的編碼方式。它可以使用1~4個字節表示一個符號,根據不同的符號而變化字節長度。
UTF-8的編碼規則很簡單,只有二條:
1)對於單字節的符號,字節的第一位設爲0,後面7位爲這個符號的unicode碼。因此對於英語字母,UTF-8編碼和ASCII碼是相同的。
2)對於n字節的符號(n>1),第一個字節的前n位都設爲1,第n+1位設爲0,後面字節的前兩位一律設爲10。剩下的沒有提及的二進制位,全部爲這個符號的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編碼。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章