Considérez le code suivant:Gestion des valeurs de substitution Unicode dans les chaînes 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)));
}
Obtient la sortie incorrecte suivante:
ff01, 0, fffd, 506, 717, 3374, 6f00, 102, 304, 500.
Cependant, si le 0xd9
dans les données d'entrée est changé en 0x9d
, puis la sortie correcte suivante est obtenue:
ff01, 0, 9d65, 304, 506, 717, 3374, 6f00, 102, 304, 500.
I reali ze que la fonctionnalité est due au fait que l'octet 0xd9
est un marqueur Unicode de substitution élevée. Question: Existe-t-il un moyen de fournir, identifier et extraire des octets de substitution (0xd800
à 0xdfff
) dans une chaîne Java Unicode?
Merci
Je crois que vous avez raison. Je venais de parvenir à la même conclusion, mais je suis retourné pour voir si quelqu'un de plus compétent avait déjà répondu. –
simplement d'insérer "(octet) 0xdc, (octet) 0xEF," rendements "FF01 694ef DCEF ..." Ce qui est comme il devrait être. –
Merci pour vos réponses. Mais, le problème ne concerne pas l'incorporation de caractères de remplacement. L'exigence consiste à alimenter toute séquence arbitraire d'octets (qui proviennent de la compression) en une chaîne Java et à la lire comme une séquence d'octets équivalente. –