考虑以下代码:
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