java中代碼點與代碼單元的區別

在java中一個char類型為16個二進制位,原本用于表示一個字符。但后來發現,16位已經不夠表示所有的字符,所以后來發展出了代碼點表示字符的方法。

代碼點:

代碼點(code point)是指編碼字符集中,字符所對應的數字。有效范圍從U+0000到U+10FFFF。其中U+0000到U+FFFF為基本字符,U+10000到U+10FFFF為增補字符。

代碼單元:

代碼單元(code unit):對代碼點進行編碼得到的1或2個16位序列。其中基本字符的代碼點直接用一個相同值的代碼單元表示,增補字符的代碼點用兩個代碼單元的進行編碼,這個范圍內沒有數字用于表示字符,因此程序可以識別出當前字符是單單元的基本字符,還是雙單元的增補字符。

代碼點與代碼單元:

一個代碼單元為16位二進制,一個代碼點為一個或兩個16位二進制。即一個代碼點可表示為一個代碼單元或兩個代碼單元。

代碼體現:

String類中length方法返回的是代碼單元的個數,codePointCount返回的是代碼點的個數。
offsetByCodePoints方法返回的是從給定的index處偏移codePointOffset個代碼點的索引。

String str = "\u03C0\uD835\uDD6B"; //\uD835\uDD6B 代表兩個代碼單元代,一個代碼點
System.out.println(str.length());//輸出3
System.out.println(str.codePointCount(0,str.length()));;//輸出2
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容