UTF-16 編碼簡介

來源:互聯網
上載者:User

-- Start

其實, 所謂的編碼就是字元數字之間的映射, 我們把這個數字稱為代碼點或碼位(code point), 碼位採用16進位加上首碼U+來表示, 如:A的碼位是U+0041.

20世紀80年代, 人們在設計Unicode編碼的時候認為, 2個位元組16位65536個碼位足以將世界上所有語言的字元進行編碼, 碼位從 U+0000 到 U+FFFF.

隨著時間的發展, 在加入大量的中文, 日文和韓文之後, 不可避免的事情發生了, 65536個碼位已經不能滿足要求了, 所以人們將Unicode的碼位從
65536
個擴充到 1114111 個, 碼位從 U+0000 到 U+10FFFF.
人們又將這 1114111 個碼位劃分成17個平面(plane), 每個平麵包含 65536 個碼位, 每個平面的碼位範圍從U+xx0000到U+xxFFFF, 其中xx表示十六進位值從00到10,共計17個平面。

第一個平面稱為基本多文種平面(Basic Multilingual Plane, BMP),或第零平面(Plane 0)。 其他平面稱為輔助平面(Supplementary Planes)。

在基本多文種平面內, 從U+D800到U+DFFF之間的碼位區段是持續保留不映射到字元, 因此UTF-16巧妙的利用了這保留下來的碼位來對輔助平面內的字元進行編碼。

在UTF-16中, 輔助平面內的字元被編碼為一對16位元長的碼元, 稱之為代理對(surrogate pair), 第一部分稱為高位代理(high surrogate)或前置代理(lead surrogates),碼位從U+D800到U+DBFF. 第二部分稱為低位代理(low surrogate)或後尾代理(trail surrogates),
碼位從U+DC00到U+DFFF.

因此在Java中, 輔助平面內的字元需要一對char來表示, 如果你試圖通過一下代碼來定義一個char, 編譯器會給出錯誤提示.

char c = '\u10FFFF';

你也不要詫異, 為什麼我們可以把一個char型變數轉換成int型而不需要強制轉換, 事實上我們可以通過這種方式來查看它的碼位.

char c = '波';int i = c;System.out.println(Integer.toHexString(i));

---更多參見:Java 精萃
-- 聲 明:轉載請註明出處
-- Last Updated on 2012-04-25
-- Written by ShangBo on 2012-04-25
-- End

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.