Qu'est ce qu'une "paire de substitution" en Java?


Je lisais la documentation pour StringBuffer, en particulier la méthode reverse(). Cette documentation mentionne quelque chose à propos de paires de substitution. Qu'est-ce qu'une paire de substitution dans ce contexte? Et quels sont faible et haut mères porteuses?

Author: DavidRR, 2011-05-05

5 answers

Le terme "paire de substitution" fait référence à un moyen de codage des caractères Unicode avec des points de code élevés dans le schéma de codage UTF-16.

Dans le codage de caractères Unicode, les caractères sont mappés sur des valeurs comprises entre 0x0 et 0x10FFFF.

En interne, Java utilise le schéma d'encodage UTF-16 pour stocker des chaînes de texte Unicode. En UTF-16, des unités de code 16 bits (deux octets) sont utilisées. Étant donné que 16 bits ne peuvent contenir que la plage de caractères de 0x0 à 0xFFFF, une complexité supplémentaire est utilisée pour stockez les valeurs au-dessus de cette plage (0x10000 à 0x10FFFF). Ceci est fait en utilisant des paires d'unités de code appelées substituts.

Les unités de code de substitution sont dans deux plages appelées "substituts élevés" et "substituts faibles", selon qu'elles sont autorisées au début ou à la fin de la séquence à deux unités de code.

 100
Author: Jeffrey L Whitledge, 2017-04-19 13:35:23

Les premières versions de Java représentaient des caractères Unicode utilisant le type de données char 16 bits. Cette conception était logique à l'époque, car tous les caractères Unicode avaient des valeurs inférieures à 65 535 (0xFFFF) et pouvaient être représentés en 16 bits. Plus tard, cependant, Unicode a augmenté la valeur maximale à 1 114 111 (0x10FFFF). Parce que les valeurs de 16 bits étaient trop petites pour représenter tous les caractères Unicode dans Unicode version 3.1, les valeurs de 32 bits-appelées points de code - ont été adoptées pour le schéma de codage UTF - 32. Mais les valeurs 16 bits étant préférées aux valeurs 32 bits pour une utilisation efficace de la mémoire, Unicode a introduit une nouvelle conception pour permettre l'utilisation continue des valeurs 16 bits. Cette conception, adoptée dans le schéma de codage UTF-16, attribue 1 024 valeurs aux substituts élevés de 16 bits(dans la plage U+D800 à U+DBFF) et 1 024 autres valeurs aux substituts bas de 16 bits(dans la plage U+DC00 à U+DFFF). Il utilise un substitut élevé suivi d'un substitut faible - une paire de substituts-pour représenter (le produit de 1 024 et 1 024)1 048 576 (0x100000) valeurs comprises entre 65 536 (0x10000) et 1 114 111 (0x10FFFF) .

 23
Author: ibrahem shabban, 2017-11-27 07:46:50

Ce que dit cette documentation, c'est que les chaînes UTF-16 invalides peuvent devenir valides après avoir appelé la méthode reverse car elles peuvent être les inverses de chaînes valides. Une paire de substitution (discutée ici) est une paire de valeurs de 16 bits en UTF-16 qui codent un seul point de code Unicode; les substituts bas et haut sont les deux moitiés de cet encodage.

 22
Author: Jeremiah Willcock, 2011-05-05 19:25:24

Les paires de substitution font référence à la façon dont UTF-16 code certains caractères, voir http://en.wikipedia.org/wiki/UTF-16/UCS-2#Code_points_U.2B10000..U.2B10FFFF

 5
Author: dfb, 2011-05-05 19:23:45

Une paire de substitution est deux "unités de code" en UTF-16 qui forment un "point de code". La documentation Java indique que ces "points de code" seront toujours valides, avec leurs "unités de code" ordonnées correctement, après l'inverse. Il indique en outre que deux unités de code de substitution non appariées peuvent être inversées et former une paire de substitution valide. Ce qui signifie que s'il y a des unités de code non appariées, alors il y a une chance que l'inverse de l'inverse ne soit pas le même!

Remarquez, cependant, le la documentation ne dit rien sur les graphèmes-qui sont plusieurs points de code combinés. Ce qui signifie e et l'accent qui va avec peut encore être commuté, plaçant ainsi l'accent avant le e. Ce qui signifie que s'il y a une autre voyelle avant le e, il peut obtenir l'accent qui était sur le e.

Aïe!

 3
Author: Gerard ONeill, 2017-06-14 13:44:11