Javaでのサロゲート・ペアの処理
Javaでは,Unicodeの符号化としてUTF-16を想定し, charは16ビットとなっていた.つまり,Unicodeのコード・ポイントのU+0000からU+FFFFまでを対象としていた.
しかしUnicode 4.0では,コード・ポイントがU+10FFFFまで拡張されている. Java 5.0では,拡張された文字は,サロゲート・ペアと呼ばれる2個のcharで表現される.
以下は,JavaのStringをintで表したコード・ポイントの配列に変換するプログラムと,その逆を行うプログラムである.
public static int[] toCodePoints(String str) { int length = str.codePointCount(0, str.length()); int[] codePoints = new int[length]; int j = 0; for (int i = 0; i < str.length(); i = str.offsetByCodePoints(i, 1)) { codePoints[j++] = str.codePointAt(i); } return codePoints; } public static String toString(int[] codePoints) { return new String(codePoints, 0, codePoints.length); }