1. 程式人生 > >Java基礎語法-Unicode、UTF-8、UTF-16

Java基礎語法-Unicode、UTF-8、UTF-16

1.Unicode(統一碼、萬國碼),從名字裡可以看出,unicode碼錶囊括世界上各國語言文字。 unidode中包含17個程式碼級別,第一個程式碼級別又稱作基本的多語言級別(碼點從U+0000到U+FFFF),
其餘16個程式碼級別(碼點從U+10000到U+10FFFF)包含一些輔助字元。這裡說一下碼點的概念:編碼表中的某個字元對應的程式碼值。如漢字“我”在unicode中對應的碼點為U+6211(在unicode3.0之前採用U+xxxx表示一個碼點在Unicode3.0中採用U-xxxx xxxx表示一個碼點),而unicode只是對字元的一種數字描述,並沒有給出這些字元在計算機中應該以多少位元組儲存。

2.UTF-8是對unicode在計算機上的儲存方式的實現,unicode碼值

在0000 0000到0000 007F之間規定為一個位元組儲存,二進位制格式為0xxxxxxx,

在0000 0080到000007FF之間規定為兩個位元組儲存,二進位制格式為110xxxxx 10xxxxxx,

在0000 0800到0000 FFFF之間規定為三個位元組儲存,二進位制格式為1110xxxx 10xxxxxx 10xxxxxx

在0001 0000到0010 FFFF之間規定為四個位元組儲存,二進位制格式為11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

一位元組的表示範圍為0到127即2的7次方,兩個位元組的表示範圍128到2047即2的11次方。三個 位元組的表示範圍為2048到65535即2的16次方,n位元組表示範圍為2的(x的個數)的次方

3.下面是unicode碼對UTF-8的轉換,舉個例子:

漢子中的“我”的unicode碼為6211,其對應的二進位制為 ‭01100010 00010001

在0000 0800到0000 FFFF區間內,所以漢子“我”在UTF-8中為3個位元組,三個位元組在UTF-8中的格式為1110xxxx 10xxxxxx 10x
 xxxxx,從右到左填充為 1110(0110) 10(001000) 10(010001)轉換為十六進位制為E68891,

括號裡的二進位制碼從左到右讀為6211的二進位制碼。

4。UTF-16

UTF-16:對任何一個字元都用兩個位元組儲存。

UTF-16基於第一個程式碼級別,每個字元用16位表示(即兩個位元組四個十六進位制數)通常稱為程式碼單元。基於其他16個級別採用一對連續的程式碼單元進行編碼,這樣構成的編碼值落入基本多語言級別中空閒的2048程式碼單元內,

稱為替代區域[U+D800到U+DBFF用作第一程式碼單元,U+DC00到U+DFFF用作第二程式碼單元](1_048_576)(可表示2的20次方個字元)。

 

 

可以看出,當文字中英文居多時,採用UTF-8能夠高效的利用計算機的儲存空間,而文字以韓文中文居多時,UTF-16會比較適合。