Considere el siguiente código:Manejo de valores de sustitución Unicode en cadenas de 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)));
}
Obtiene el siguiente resultado incorrecto:
ff01, 0, fffd, 506, 717, 3374, 6f00, 102, 304, 500.
Sin embargo, si el 0xd9
en los datos de entrada se cambia a 0x9d
, a continuación, se obtiene la siguiente salida correcta:
ff01, 0, 9d65, 304, 506, 717, 3374, 6f00, 102, 304, 500.
I reali ze que la funcionalidad se debe al hecho de que el byte 0xd9
es un marcador Unicode de alto sustituto.
Pregunta: ¿Hay alguna manera de alimentar, identificar y extraer bytes suplentes (0xd800
en 0xdfff
) en una cadena Java Unicode?
Gracias
Creo que tienes razón. Acababa de llegar a la misma conclusión, pero volví a ver si alguien más conocedor ya había respondido. –
simplemente insertando "(byte) 0xDC, (byte) 0xEF," rendimientos "FF01 694ef dcef ...", que es como debe ser. –
Gracias por sus respuestas. Pero, el problema no se trata de incrustar personajes sustitutos. El requisito es alimentar cualquier secuencia de bytes arbitraria (que se obtiene a partir de la compresión) en una cadena de Java y leerla nuevamente como una secuencia de bytes equivalente. –