當前位置:編程學習大全網 - 編程語言 - java中的代碼點和代碼單元分別都是什麽?誰能詳細解釋

java中的代碼點和代碼單元分別都是什麽?誰能詳細解釋

說白了壹個代碼點就是壹個Unicode字符。代碼單元就是代碼點的集合。

字符視圖

要了解字符集標準,您必須能區分三種不同的字符視圖:

字符集(字符的抽象列表)。

作為帶標量值的“代碼點”的字符。

作為編碼數據的字符。

字符集(字符的抽象列表)

字符集是各種文字(包括拉丁文、西裏爾文、中文、朝鮮語、日語、希伯來語和阿拉伯語)中所包含的字符的壹個抽象列表,由壹百多萬個字符組成。字符集還包括其他符號,例如音符。

Unicode 和 GB18030 標準都具有字符集。當某個標準添加了新字符時,為了保持對等,另壹個標準也將添加這些字符。

作為帶標量值的“代碼點”的字符

註意 這第二個字符視圖只適用於 Unicode,而不適用於 GB18030。

字符集中的每個字符都被分配到壹個“代碼點”。每個代碼點都有壹個特定的數值,稱為標量值。該標量值通常用十六進制表示。

代碼點存在於“代碼空間”中。代碼空間由許多標量值組成,這些值被劃分在兩個平面中:

基本多語種平面(64k 大小)。

在 Unicode 中,此下平面中的值的十六進制表示位於 U+0000 到 U+FFFF 的範圍中。

輔助多語種平面(16 個 64k 大小的附加節)。

在 Unicode 中,此上平面中的值的十六進制表示位於 U+10000 到 U+10FFFF 的範圍中。

所有可能的標量值的完整代碼空間的大小為 17 * 64k(1,088,000 個可能值)。

作為編碼數據的字符

每個編碼形式將字符從字符集轉換為編碼數據。

在 GB18030 中,編碼數據直接從字符集派生:標量值(作為字符集和編碼數據之間的媒介)的概念只適用於 Unicode。

在 Unicode 中,通過向標量值應用某個算法來派生編碼數據。

Unicode 定義了三種字符編碼形式:

UTF-8

UTF-16

UTF-32

代碼點和代碼單元

在每種編碼形式中,代碼點被映射到壹個或多個代碼單元。

註意 有關代碼點的概述,請參見上壹節字符視圖。

“代碼單元”是各個編碼形式中的單個單元。代碼單元的大小等效於特定編碼的位數測量單位:

UTF-8 中的代碼單元由 8 位組成。

UTF-16 中的代碼單元由 16 位組成。

UTF-32 中的代碼單元由 32 位組成。

GB18030 中的代碼單元由 8 位組成。

每個代碼點中的代碼單元數

映射到代碼點所需的代碼單元數根據編碼形式而有所不同:

UTF-8

在 UTF-8 中,因為代碼單元較小的緣故,每個代碼點常常被映射到多個代碼單元。代碼點將被映射到壹個、兩個、三個或四個代碼單元。

UTF-16

UTF-16 的代碼單元大小是 8 位代碼單元的兩倍。所以,標量值小於 U+10000 的代碼點被編碼到單個代碼單元中。

對於標量值大於或等於 U+10000 的代碼點,每個代碼點需要兩個代碼單元。在 UTF-16 中,這些代碼單元對有壹個獨特的術語:“Unicode 代理對”。

註意 下面對 Unicode 代理對的支持進行了討論。

UTF-32

UTF-32 中使用的 32 位代碼單元足夠大,每個代碼點都可編碼為單個代碼單元。

GB18030

在 GB18030 中,因為代碼單元較小的緣故,每個代碼點常常被映射到多個代碼單元。代碼點將被映射到壹個、兩個或四個代碼單元。

對 Unicode 代理對的支持

某些受 Unicode 支持的文字包含代碼點的標量值大於或等於 U+10000 的字符。在 UTF-16 中,通過使用代理對來對這些代碼點進行編碼。

正確處理 Unicode 代理對非常重要。例如,當您在使用 UTF-16 編碼的應用程序中處理文本時,如果要添加、刪除或選擇字符以進行剪切、復制或粘貼操作,文本光標必須將每個代碼點作為單個文本字符導航。

  • 上一篇:如何在Eclipse中編寫加工草圖
  • 下一篇:如何在編程貓裏做迷宮
  • copyright 2024編程學習大全網