Xét đoạn mã sau:Xử lý giá trị thay thế Unicode trong chuỗi Java
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)));
}
Gets đầu ra không chính xác như sau:
ff01, 0, fffd, 506, 717, 3374, 6f00, 102, 304, 500.
Tuy nhiên, nếu 0xd9
trong các dữ liệu đầu vào được thay đổi để 0x9d
, sau đó sản lượng chính xác sau đây thu được:
ff01, 0, 9d65, 304, 506, 717, 3374, 6f00, 102, 304, 500.
I reali ze rằng chức năng là do thực tế là byte 0xd9
là một điểm đánh dấu Unicode thay thế cao.
Câu hỏi: Có cách nào để nạp, nhận dạng và trích xuất byte thay thế (0xd800
thành 0xdfff
) bằng chuỗi Unicode Java không?
Cảm ơn
Tôi tin rằng bạn đã đúng. Tôi đã đi đến cùng một kết luận nhưng đã kiểm tra lại để xem liệu có ai hiểu biết hơn đã trả lời hay không. –
Chỉ cần chèn "(byte) 0xdc, (byte) 0xef," yields "ff01 694ef dcef ..." Điều này là đúng. –
Cảm ơn câu trả lời của bạn. Nhưng, vấn đề không phải là về việc nhúng các nhân vật thay thế. Yêu cầu là nạp bất kỳ chuỗi byte tùy ý nào (là đầu ra từ nén) vào một chuỗi Java và đọc nó trở lại như một chuỗi byte tương đương. –