在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