JAvaにおけるコードポイントとコードユニットの違い

945 ワード

Javaでは、1つのcharタイプが16バイナリビットで、1文字を表すために使用されます.しかしその後,16ビットはすべての文字を表すのに十分ではないことが分かったため,コードポイントが文字を表す方法が開発された.
コードポイント:
コードポイント(code point)とは、文字セットを符号化し、文字に対応する数字を指す.有効範囲はU+0000からU+10 FFFFまでです.ここで、U+0000~U+FFFFは基本文字であり、U+10000~U+10 FFFFは補完文字である.
コード単位:
コードユニット(code unit):コードポイントを符号化して得られる1または2個の16ビットシーケンス.ここで、基本文字のコード点は直接同じ値のコードユニットで表され、補完文字のコード点は2つのコードユニットで符号化され、この範囲には文字を表す数字がないため、プログラムは現在の文字が単純な基本文字なのか、それとも2ユニットの補完文字なのかを識別することができる.
コードポイントとコードユニット:
1つのコードユニットは16ビットバイナリであり、1つのコードポイントは1つまたは2つの16ビットバイナリである.すなわち、1つのコードポイントは、1つのコードユニットまたは2つのコードユニットとして表すことができる.
コード表現:
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