次のコードを検討してください。
byte aBytes[] = { (byte)0xff,0x01,0,0,
(byte)0xd9,(byte)0x65,
(byte)0x03,(byte)0x04, (byte)0x05, (byte)0x06, (byte)0x07,
(byte)0x17,(byte)0x33, (byte)0x74, (byte)0x6f,
0, 1, 2, 3, 4, 5,
0 };
String sCompressedBytes = new String(aBytes, "UTF-16");
for (int i=0; i<sCompressedBytes.length; i++) {
System.out.println(Integer.toHexString(sCompressedBytes.codePointAt(i)));
}
次の誤った出力を取得します。
ff01, 0, fffd, 506, 717, 3374, 6f00, 102, 304, 500.
ただし、0xd9
入力データの を に変更する0x9d
と、次の正しい出力が得られます。
ff01, 0, 9d65, 304, 506, 717, 3374, 6f00, 102, 304, 500.
0xd9
この機能は、バイトが上位サロゲート Unicode マーカーであるという事実によるものだと認識しています。
質問: Java Unicode 文字列内のサロゲート バイト ( 0xd800
to ) をフィード、識別、および抽出する方法はありますか?
ありがとう0xdfff