Caractères de contrôle Unicode
# Caractères de contrôle Unicode

Beaucoup de caractères de contrôle Unicode sont utilisés pour contrôler l’interprétation ou l’affichage du texte, mais ces caractères n’ont eux-mêmes aucune représentation visuelle, ni même spatiale. Par exemple, le caractère null ((U+0000 <control-0000> ) est utilisé par le langage de programmation C pour indiquer la fin d’une chaîne de caractères. De cette façon, les programmes n’ont besoin que de l’adresse mémoire du début de la chaîne (et n’ont pas à connaitre sa longueur), car la chaîne se termine dès que le programme lit le caractère null.

## Caractères de contrôle de l'ISO 6429 (C0 et C1)

Les caractères de contrôle de U+0000 à U+001F et U+007F viennent de l'ASCII. Ceux de U+0080 à U+009F viennent de l'ISO/CEI 8859. Ils sont spécifiés par la norme ISO 6429 et sont souvent appelés « Codes de contrôle C0 et C1 » (respectivement).

La plupart de ces caractères ne jouent aucun rôle explicite dans la manipulation de texte Unicode. Toutefois les caractères U+0000 <control-0000> , U+0009 <control-0009> (HT), U+000A <control-000A> (LF), U+000D <control-000D> (CR), et U+0085 <control-0085> (CR+LF) sont communément utilisés dans le traitement de texte comme caractères de formatage.

## Les séparateurs introduits par Unicode

Dans une tentative de simplification des différents caractères de fin de ligne, la norme ISO/CEI 10646 (UCS) introduit ses propres caractères séparateurs pour les lignes et les paragraphes : U+2028   line separator (HTML : &#8232; LSEP) et U+2029   paragraph separator (HTML : &#8233; PSEP). Ces caractères servent uniquement au formatage de texte et ne sont pas des caractères de contrôle.

## Étiquette d’identification de langues

Par le passé, l'Unicode a inclus 128 caractères — désormais obsolètes — pour l’identification des langues. Ces caractères sont la copie de l’essentiel des 128 caractères d’ASCII, mais servent à identifier le texte qui les suit comme étant écrit dans une langue particulière. L’étiquette identifiant la langue suit la recommandation BCP 47. Par exemple, pour indiquer que le texte est écrit en français tel que pratiqué en Belgique, on utilisera la séquence suivante : l'étiquette de langue (U+E0001), le caractère « étiquette de langue F minuscule » (U+E0066), le caractère « étiquette de langue, R minuscule » (U+E0072), le caractère « étiquette de langue, trait d’union » (U+E002D), le caractère « étiquette de langue, B minuscule » (U+E0062), le caractère « étiquette de langue, E minuscule » (U+E0065).

Ces caractères d’identification de langues ne sont pas affichées eux-mêmes. Toutefois ils fournissent une information au traitement de texte ou pour l’affichage des autres caractères. Par exemple l’affichage des idéogrammes UniHan peuvent substituer des glyphes différents selon que l’étiquette de langues indique du coréen ou du japonais. Autre exemple, l’identification de la langue peut influencer l’affichage des chiffres (de 0 a 9).

La version 5.1 d’Unicode (2008) a déclaré obsolètes tous les caractères d’étiquette et déconseille fortement leur utilisation.

La version 8.0 d’Unicode (2015), annule l'obsolescence des caractères U+E0020–U+E007E. Toutefois les caractères U+E0001 LANGUAGE TAG et U+E007F CANCEL TAG restent obsolètes. Ce changement a été fait pour « ouvrir la voie à une utilisation future des caractères d’étiquette pour un autre but que l’identification des langues ». Unicode stipule que « l’utilisation des caractères d’étiquettes pour représenter des étiquettes de langues dans un flux de texte brut reste un mécanisme obsolète pour transmettre la langue du texte.

## Annotation interlinéaire

Trois caractères de formatage permettent les annotation interlinéaires (U+FFF9, U+FFFA, U+FFFB). Ils peuvent être utilisés pour fournir des notes qui seront typiquement affichées entre les lignes du texte principal. Unicode considère ces annotations comme du texte formaté et recommande l’utilisation d’un autre protocoles pour les représenter. La recommandation du W3C pour les annotations Ruby est un exemple de protocole alternatif avec des fonctionnalités plus avancées.

## Contrôle de texte bidirectionnel

Unicode prend en charge la bidirectionnalité standard des textes sans utiliser de caractères spéciaux. En d’autres termes, les logiciels conformes à l’Unicode doivent afficher les caractères de droite-à-gauche comme les lettres hébraïques simplement en se basant sur les propriétés Unicode des caractères. De même Unicode gère le mélange de textes « de gauche à droite » et « de droite à gauche » sans utiliser de caractères spéciaux. Par exemple on peut mettre une citation arabe (« بسملة » traduit en français par « basmala ») dans un texte français et les lettres arabes seront affichées de droite à gauche tandis que les lettres latines seront affichées de gauche à droite. Toutefois la prise en charge des textes bidirectionnels devient plus compliquée quand les changements de direction s’imbriquent, par exemple une citation en arabe qui elle-même cite une phrase en français. D’autres situations peuvent également compliquer cela, comme quand l’auteur veut forcer le sens d’écriture de caractères (écrire de droite à gauche des caractères qui s’écrivent habituellement de gauche à droite). Bien que ces situations soient plutôt rares, Unicode fournit 7 caractères de contrôle (U+200E, U+200F, U+202A, U+202B, U+202C, U+202D, U+202E) pour gérer jusqu’à 61 niveaux d’imbrication de textes bidirectionnels.

## Sélecteurs de variantes

Beaucoup de caractères représentent des glyphes alternatifs dépendants du contexte. Par exemple les caractères cursifs arabes et latins substituent des glyphes différents pour les relier entre eux en fonction de leurs positions dans le mot (initiale, médiale, finale ou isolée). Ces types de substitution de glyphe sont facilement gérés par le contexte du caractère sans qu’aucune action du rédacteur ne soit nécessaire. Il peut également utiliser des caractères à usages spéciaux tel que les caractères liant ou antiliant (généralement sans chasse) pour obtenir de force un glyphe alternatif. Les ligatures non-orthographiques sont des cas similaires où les glyphes peuvent être substitués simplement en activant ou en désactivant cette fonctionnalité des attributs de texte formaté.

Cependant pour d'autres cas de substitution de glyphes, l'intention de l'auteur peut avoir besoin d'être enregistrer dans le texte car elle ne peut pas être déterminée contextuellement. C’est le cas avec les caractères kanji où différents glyphes sont utilisés pour le même caractère, soit historiquement soit pour les idéogrammes de noms de famille. Ceci est l'une des zones d'ombre dans la distinction entre un glyphe et un caractère. Si un nom de famille diffère légèrement de l'idéogramme dont il dérive, alors ce n'est qu'une simple variante de glyphe ou une variante de caractère. Depuis Unicode 3.2 et 4.0, le jeu de caractères comprend 256 sélecteurs de variante de sorte que ces marques de caractères combinant permettent de choisir parmi 256 variantes possibles de caractère ou de glyphe pour le caractère précédent.

## Images des caractères de contrôle

Unicode fournit des caractères graphiques pour représenter les caractères de contrôle, notamment les caractères de contrôle C0, dans le bloc Control Pictures. Il ne s’agit que d’une représentation visuelle par des véritables caractères de contrôle.

