Si consideri il seguente codice:gestione dei valori di surrogati Unicode in stringhe 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)));
}
Ottiene il seguente output corretto:
ff01, 0, fffd, 506, 717, 3374, 6f00, 102, 304, 500.
Tuttavia, se il 0xd9
nei dati di input viene modificato in 0x9d
, poi si ottiene la seguente uscita corretta:
ff01, 0, 9d65, 304, 506, 717, 3374, 6f00, 102, 304, 500.
I reali ze che la funzionalità è dovuta al fatto che il byte 0xd9
è un marcatore Unicode ad alto surrogato.
Domanda: C'è un modo per alimentare, identificare ed estrarre i byte surrogati (0xd800
a 0xdfff
) in una stringa Java Unicode?
Grazie
Credo che tu abbia ragione. Ero appena giunto alla stessa conclusione ma ho controllato per vedere se qualcuno più esperto avesse già risposto. –
Semplicemente inserendo "(byte) 0xDC, (byte) 0xEF," rese "FF01 694ef dcef ...", che è come dovrebbe essere. –
Grazie per le vostre risposte. Ma il problema non riguarda l'incorporamento di caratteri surrogati. Il requisito è di alimentare qualsiasi sequenza di byte arbitraria (che viene emessa dalla compressione) in una stringa Java e di leggerla come una sequenza di byte equivalente. –