Java--UTF-8

UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼,又稱萬國碼。由Ken Thompson於1992年建立。如今已經標準化爲RFC 3629。UTF-8用1到6個字節編碼UNICODE字符。用在網頁上能夠同一頁面顯示中文簡體繁體及其它語言(如英文,日文,韓文)。html

發展歷程

數據結構簡要 數據結構簡要
在全部 字符集中,最知名的可能要數被稱爲 ASCII的7位字符集了。它是 美國標準信息交換代碼(American Standard Code for Information Interchange)的縮寫, 爲美國英語通訊所設計。它由128個 字符組成,包括大小寫字母、數字0-九、標點符號、非 打印字符(換行符、 製表符等4個)以及 控制字符(退格、響鈴等)組成。
可是,因爲他是針對英語設計的,當處理帶有音調標號(形如漢語的拼音)的亞洲文字時就會出現問題。所以,建立出了一些包括255個字符的由ASCII擴展的字符集。其中有一種一般被稱爲IBM字符集,它把值爲128-255之間的字符用於畫圖和畫線,以及一些特殊的歐洲字符。另外一種8位字符集是 ISO 8859-1Latin 1,也簡稱爲ISOLatin-1。它把位於128-255之間的 字符用於拉丁字母表中特殊語言字符的編碼,也所以而得名。
ASCII碼格式 ASCII碼格式
歐洲語言不是地球上的惟一語言,所以亞洲和非洲語言並不能被8位 字符集所支持。僅漢語字母表(或pictograms)就有80000以上個 字符。可是把漢語、日語和越南語的一些類似的字符結合起來,在不一樣的語言裏,使不一樣的字符表明不一樣的字,這樣只用2個 字節就能夠編碼地球上幾乎全部地區的文字。所以,建立了 UNICODE編碼。它經過增長一個高字節對ISO Latin-1字符集進行擴展,當這些高字節位爲0時,低字節就是ISO Latin-1字符。UNICODE支持歐洲、非洲、中東、亞洲(包括統一標準的東亞象形漢字和韓國表音文字)。可是,UNICODE並無提供對諸如Braille, Cherokee, Ethiopic, Khmer, Mongolian, Hmong, Tai Lu, Tai Mau文字的支持。同時它也不支持如Ahom, Akkadian, Aramaic,  BabylonianCuneiform, Balti, Brahmi, Etruscan, Hittite, Javanese, Numidian, Old Persian Cuneiform, Syrian之類的古老文字。
事實證實,對能夠用 ASCII表示的 字符使用UNICODE並不高效,由於UNICODE比ASCII佔用大一倍的空間,而對ASCII來講高 字節的0對他毫無用處。爲了解決這個問題,就出現了一些中間格式的 字符集,他們被稱爲通用轉換格式,即 UTF(Universal Transformation Format)。常見的UTF格式有:UTF-7, UTF-7.5, UTF-8, UTF-16, 以及  UTF-32
 

字符集

若是UNICODE 字符由2個 字節表示,則編碼成UTF-8極可能須要3個字節。而若是UNICODE字符由4個字節表示,則編碼成UTF-8可能須要6個字節。用4個或6個字節去編碼一個UNICODE字符可能太多了,但不多會遇到那樣的UNICODE字符。 UTF-8轉換表表示以下:
Unicode/UCS-4
bit數
UTF-8
byte數
備註
0000 ~
007F
0~7
0XXX XXXX
1

  
0080 ~
07FF
8~11
110X XXXX
10XX XXXX
2

  
0800 ~
FFFF
12~16
1110XXXX
10XX XXXX
10XX XXXX
3
基本定義範圍:0~FFFF
1 0000 ~
1F FFFF
17~21
1111 0XXX
10XX XXXX
10XX XXXX
10XX XXXX
4
Unicode6.1定義範圍:0~10 FFFF
20 0000 ~
3FF FFFF
22~26
1111 10XX
10XX XXXX
10XX XXXX
10XX XXXX
10XX XXXX
5
說明:此非unicode編碼範圍,屬於UCS-4 編碼
早期的規範UTF-8能夠到達6字節序列,能夠覆蓋到31位元(通用字符集原來的極限)。儘管如此,2003年11月UTF-8 被 RFC 3629 從新規範,只能使用原來Unicode定義的區域, U+0000到U+10FFFF。根據規範,這些字節值將沒法出如今合法 UTF-8序列中
400 0000 ~
7FFF FFFF
27~31
1111 110X
10XX XXXX
10XX XXXX
10XX XXXX
10XX XXXX
10XX XXXX
6
實際表示ASCII 字符的UNICODE字符,將會編碼成1個 字節,而且UTF-8表示與ASCII字符表示是同樣的。全部其餘的UNICODE字符轉化成UTF-8將須要至少2個字節。每一個字節由一個 換碼序列開始。第一個字節由惟一的換碼序列,由n位連續的1加一位0組成, 首字節連續的1的個數表示 字符編碼所需的字節數。
Unicode轉換爲UTF-8時,能夠將Unicode二進制從低位往高位取出二進制數字,每次取6位,如上述的二進制就能夠分別取出爲以下示例所示的格式,前面按格式填補,不足8位用0填補。
注:Unicode轉換爲UTF-8須要的字節數能夠根據這個規則計算:若是Unicode小於0X80(Ascii字符),則轉換後爲1個字節。不然轉換後的字節數爲Unicode二進制位數減1再除以5。
示例
UNICODE uCA(1100 1010) 編碼成UTF-8將須要2個 字節
uCA -> C3 8A
UNICODE uF03F (11110000 0011 1111) 編碼成UTF-8將須要3個字節:
u F03F -> EF 80 BF
Unicode 16進制
Unicode 2進制
bit數
UTF-8 2進制
UTF-8 16進制
CA
1100 1010
8
1100 00111000 1010
C3 8A
F0 3F
11110000 0011 1111
16
111011111000 00001011 1111
EF 80 BF
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息