天天看點

UNICODE、UTF-8、UTF-16、ANSI的差別和聯系1.ASCII字元集(ASCII碼)2.ASCII擴充字元集3.ANSI3.UTF-8 編碼4.UCS-2 編碼5.UTF-16 編碼6.UTF-32 編碼7.Unicode字元集

目錄

1.ASCII字元集(ASCII碼)

2.ASCII擴充字元集

3.ANSI

3.UTF-8 編碼

4.UCS-2 編碼

5.UTF-16 編碼

6.UTF-32 編碼

7.Unicode字元集

1.ASCII字元集(ASCII碼)

它是美國标準資訊交換代碼(American Standard Code for Information Interchange)的縮寫, 為美國英語通信所設計。它由128個字元組成,包括大小寫字母、數字0-9、标點符号、非列印字元(換行符、制表符等4個)以及控制字元(倒退、響鈴等)組成。

2.ASCII擴充字元集

由于ASCII字元集是針對英語設計的,當處理帶有音調标号(形如漢語的拼音)的亞洲文字時就會出現問題。是以,建立出了一些包括256個字元的由ASCII擴充的字元集。其中有一種通常被稱為IBM字元集,它把值為128-255之間的字元用于畫圖和畫線,以及一些特殊的歐洲字元。另一種8位字元集是ISO 8859-1Latin 1,也簡稱為ISOLatin-1。它把位于128-255之間的字元用于拉丁字母表中特殊語言字元的編碼,也是以而得名。

3.ANSI

ANSI(American National Standard Institite)是美國國家标準學會(美國的一個非營利組織)的縮寫。ANSI用來表示編碼時不是指的一種特定的編碼,它是WINDOWS為了語言本地化而生的,不同國家和地區的WINDOWS作業系統上面的語言會不一樣,不同的語言就會有不同的編碼,但是對同一台計算機而言,隻會使用一種系統編碼,可以了解為這台計算機的系統本地編碼,微軟把這各種各樣的本地編碼統稱為ANSI編碼。ANSI隻存在于Windows作業系統中。

在簡體中文Windows作業系統中,ANSI 編碼代表 GB2312編碼;在繁體中文Windows作業系統中,ANSI編碼代表Big5;在日文Windows作業系統中,ANSI 編碼代表 JIS 編碼。

3.UTF-8 編碼

UTF-8 是 Unicode 的一種實作方式,UTF-8 是編碼方式,而 Unicode 是字元集合。

UTF-8是可變長的編碼方式,UTF-8使用1~4位元組為每個字元編碼:

·一個ASCIl字元隻需1位元組編碼(Unicode範圍由U+0000~U+007F)。

·帶有變音符号的拉丁文、希臘文、西裡爾字母、亞美尼亞語、希伯來文、阿拉伯文、叙利亞文等字母則需要2位元組編碼(Unicode範圍由U+0080~U+07FF)。

·其他語言的字元(包括中日韓文字、東南亞文字、中東文字等)包含了大部分常用字,使用3位元組編碼。

·其他極少使用的語言字元使用4位元組編碼。

下表表示如何把一個從Unicode字元轉化到UTF-8編碼

UNICODE編号 UTF-8位元組流
0x000000-0x00007F 0XXXXXXX
0x000080-0x0007FF 110XXXXX 10XXXXXX
0x008000-0x00FFFF 1110XXXX 10XXXXXX 10XXXXXX
0x010000-0x10FFFF 11110XXXX 10XXXXXX 10XXXXXX 10XXXXXX

例1:“漢”字的Unicode編碼是0x6C49。0x6C49在0x0800-0xFFFF之間,使用用3位元組模闆了:1110xxxx 10xxxxxx 10xxxxxx。将0x6C49寫成二進制是: 0110 1100 0100 1001, 用這個比特流依次代替模闆中的x,得到:1110 0110 1011 0001 0100 1001,即E6 B1 89。

例2:Unicode編碼0x20C30在0x010000-0x10FFFF之間,使用用4位元組模闆了:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx。将0x20C30寫成21位二進制數字(不足21位就在前面補0):0 0010 0000 1100 0011 0000,用這個比特流依次代替模闆中的x,得到:,即F0 A0 B0 B0。

UTF-8 是使用網際網路上使用最廣泛的 unicode 編碼方式,市場佔有率占比90%以上。

4.UCS-2 編碼

UCS-2 隻使用了兩個位元組來表示1個字元,也就是說隻能表示 65536 個字元,它隻能表示 BMP 中的字元。

目前的 unicode 字元數量已遠遠超過了 UCS-2 的數量,是以 UCS-2 雖然還在被好多軟體使用,但它已經過期了。

正因為 UCS-2 編碼依然被許多軟體使用,為了能夠表示出 BMP 以外的平面内的字元,就産生了一種新的編碼 UTF-16 編碼。

5.UTF-16 編碼

UTF-16 就是為了解決 UCS-2 編碼的問題而生的,它擴充自 UCS-2。把Unicode編碼記作U,則編碼規則可表示為如下:

  • 如果U<0x10000,使用2個位元組表示
  • 如果U≥0x10000,使用 4 個位元組表示

UTF-16 編碼的市場佔有率和 UTF-8 比很小, 在web 頁面中隻占 0.01% 。而且主要在 windows 系統中使用, Unix/Linux 以及 MacOS 中很少使用。

6.UTF-32 編碼

UTF-32 對 Unicode 中的每個字元都用 4 個位元組來表示,占用的空間比其他編碼要多的多,也正是這個原因,人們才用的很少。

7.Unicode字元集

Unicode隻是規定了每個字元的編号,但是它并沒有指定這些編号如何在計算機上存儲。而不同的編碼方式會以不同的規則對這些編号進行轉換,使得字元能夠被識别和傳遞。

繼續閱讀