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);
    }