Caractère de contrôle - Control character

En informatique et télécommunication , un caractère de contrôle ou caractère non imprimable ( NPC ) est un point de code (un nombre ) dans un jeu de caractères , qui ne représente pas un symbole écrit. Ils sont utilisés comme signalisation dans la bande pour provoquer des effets autres que l'ajout d'un symbole au texte. Tous les autres caractères sont principalement des caractères imprimables , imprimables ou graphiques , à l' exception peut - être du caractère " espace " ( voir caractères imprimables ASCII ).

Toutes les entrées du tableau ASCII sous le code 32 (techniquement le jeu de codes de contrôle C0 ) sont de ce type, y compris CR et LF utilisés pour séparer les lignes de texte. Le code 127 ( DEL ) est également un caractère de contrôle. Les ensembles ASCII étendus définis par ISO 8859 ont ajouté les codes 128 à 159 en tant que caractères de contrôle, cela a été principalement fait pour que si le bit de poids fort était supprimé, il ne changerait pas un caractère d'impression en un code de contrôle C0, mais il y a eu quelques affectations ici, en particulier NEL . Ce deuxième ensemble est appelé l' ensemble C1 .

Ces 65 codes de contrôle ont été transférés vers Unicode . Unicode a ajouté plus de caractères qui pourraient être considérés comme des contrôles, mais il fait une distinction entre ces « caractères de formatage » (tels que le non-joint de largeur zéro ) et les 65 caractères de contrôle.

Le jeu de caractères EBCDIC ( Extended Binary Coded Decimal Interchange Code ) contient 65 codes de contrôle, y compris tous les codes de contrôle ASCII ainsi que des codes supplémentaires qui sont principalement utilisés pour contrôler les périphériques IBM.

0x00 0x10
0x00 NUL DLE
0x01 SOH DC1
0x02 STX DC2
0x03 ETX DC3
0x04 EOT DC4
0x05 ENQ NAK
0x06 ACK SYN
0x07 BEL ETB
0x08 BS POUVEZ
0x09 HT EM
0x0A LF SOUS
0x0B Vermont ESC
0x0C FF FS
0x0D RC SG
0x0E DONC RS
0x0F SI nous
0x7F DEL

Histoire

Les signes procéduraux en code Morse sont une forme de caractère de contrôle.

Une forme de caractères de contrôle a été introduite dans le code Baudot de 1870 : NUL et DEL. Le code Murray de 1901 a ajouté le retour chariot (CR) et le saut de ligne (LF), et d'autres versions du code Baudot incluaient d'autres caractères de contrôle.

Le caractère de cloche (BEL), qui sonnait une cloche pour alerter les opérateurs, était également un des premiers caractères de contrôle de télétype .

Les caractères de contrôle ont également été appelés "effecteurs de format".

En ASCII

Les caractères de contrôle en ASCII encore couramment utilisés incluent :

Les caractères de contrôle peuvent être décrits comme faisant quelque chose lorsque l'utilisateur les saisit, comme le code 3 (caractère de fin de texte , ETX, ^C) pour interrompre le processus en cours, ou le code 4 (caractère de fin de transmission , EOT, ^D), utilisé pour terminer la saisie de texte ou pour quitter un shell Unix . Ces utilisations ont généralement peu à voir avec leur utilisation lorsqu'elles sont dans le texte en cours de sortie, et sur les systèmes modernes n'impliquent généralement pas du tout la transmission du numéro de code (au lieu de cela, le programme obtient le fait que l'utilisateur maintient la touche Ctrl enfoncée. et en appuyant sur la touche marquée d'un 'C').

Il y avait pas mal de caractères de contrôle définis (33 en ASCII, et la norme ECMA-48 en ajoute 32 de plus). En effet, les premiers terminaux avaient des commandes mécaniques ou électriques très primitives qui rendaient tout type d' API de mémorisation d'état assez coûteux à implémenter, donc un code différent pour chaque fonction ressemblait à une exigence. Il est rapidement devenu possible et peu coûteux d'interpréter des séquences de codes pour exécuter une fonction, et les fabricants d'appareils ont trouvé un moyen d'envoyer des centaines d'instructions d'appareils. Plus précisément, ils ont utilisé le code ASCII 27 (échappement), suivi d'une série de caractères appelée « séquence de contrôle » ou « séquence d'échappement ». Le mécanisme a été inventé par Bob Bemer , le père de l'ASCII. Par exemple, la séquence du code 27, suivie des caractères imprimables "[2;10H", amènerait un terminal DEC VT-102 à déplacer son curseur vers la 10e cellule de la 2e ligne de l'écran. Plusieurs standards existent pour ces séquences, notamment ANSI X3.64 . Mais le nombre de variations non standard utilisées est important, en particulier parmi les imprimeurs, où la technologie a progressé beaucoup plus rapidement que n'importe quel organisme de normalisation ne peut suivre.

En Unicode

En Unicode, les « caractères de contrôle » sont U+0000—U+001F (contrôles C0), U+007F (supprimer) et U+0080—U+009F (contrôles C1). Leur catégorie générale est "Cc". Les codes de mise en forme sont distincts, en catégorie générale "Cf". Les caractères de contrôle Cc n'ont pas de nom en Unicode, mais reçoivent à la place des étiquettes telles que "<control-001A>".

Affichage

Il existe un certain nombre de techniques pour afficher des caractères non imprimables, qui peuvent être illustrés par le caractère cloche en codage ASCII :

  • Point de code : décimal 7, hexadécimal 0x07
  • Une abréviation, souvent en trois majuscules : BEL
  • Un caractère spécial condensant l'abréviation : Unicode U+2407 (␇), "symbole de cloche"
  • Une représentation graphique ISO 2047 : Unicode U+237E (⍾), "graphique pour cloche"
  • Notation caret en ASCII, où le point de code 00xxxxx est représenté par un caret suivi de la lettre majuscule au point de code 10xxxxx : ^G
  • Une séquence d'échappement , comme dans les codes de chaînes de caractères C / C++ : \a , \007 , \x07 , etc.

Comment les caractères de contrôle correspondent aux claviers

Les claviers basés sur ASCII ont une touche intitulée " Control ", " Ctrl " ou (rarement) " Cntl " qui est utilisée un peu comme une touche Maj, étant pressée en combinaison avec une autre touche de lettre ou de symbole. Dans une mise en œuvre, la touche de commande génère le code 64 places en dessous du code de la lettre majuscule (généralement) avec laquelle elle est enfoncée (c'est-à-dire soustrayez 64 de la valeur du code ASCII en décimal de la lettre majuscule (généralement)). L'autre implémentation est de prendre le code ASCII produit par la clé et de le faire ET bit à bit avec 31, forçant les bits 6 et 7 à zéro. Par exemple, en appuyant sur "control" et la lettre "g" ou "G" (code 107 en octal ou 71 en base 10 , qui est 01000111 en binaire ), produit le code 7 (Bell, 7 en base 10, ou 00000111 en binaire). Le caractère NULL (code 0) est représenté par Ctrl-@, "@" étant le code immédiatement avant "A" dans le jeu de caractères ASCII. Pour plus de commodité, de nombreux terminaux acceptent Ctrl-Espace comme alias pour Ctrl-@. Dans les deux cas, cela produit l'un des 32 codes de contrôle ASCII entre 0 et 31. Cette approche n'est pas en mesure de représenter le caractère DEL en raison de sa valeur (code 127), mais Ctrl-? est souvent utilisé pour ce caractère, en soustrayant 64 d'un '?' donne -1, qui s'il est masqué à 7 bits est 127.

Lorsque la touche de commande est maintenue enfoncée, les touches de lettres produisent les mêmes caractères de contrôle quel que soit l'état du déplacement ou le verrouillage des majuscules clés. En d'autres termes, peu importe que la clé ait produit une lettre majuscule ou une lettre minuscule. L'interprétation de la touche de commande avec l'espace, le caractère graphique et les touches numériques (codes ASCII 32 à 63) varient selon les systèmes. Certains produiront le même code de caractère que si la touche de commande n'était pas maintenue enfoncée. D'autres systèmes traduisent ces touches en caractères de contrôle lorsque la touche de contrôle est maintenue enfoncée. L'interprétation de la clé de contrôle avec des clés non ASCII ("étrangères") varie également d'un système à l'autre.

Les caractères de contrôle sont souvent rendus sous une forme imprimable connue sous le nom de notation caret en imprimant un caret (^) puis le caractère ASCII qui a une valeur du caractère de contrôle plus 64. Les caractères de contrôle générés à l'aide de touches alphabétiques sont ainsi affichés avec les majuscules forme de la lettre. Par exemple, ^G représente le code 7, qui est généré en appuyant sur la touche G lorsque la touche de commande est maintenue enfoncée.

Les claviers ont également généralement quelques touches uniques qui produisent des codes de caractères de contrôle. Par exemple, la touche intitulée "Retour arrière" produit généralement le code 8, le code "Tabulation" 9, le code "Entrée" ou "Retour" 13 (bien que certains claviers puissent produire le code 10 pour "Entrée").

De nombreux claviers incluent des touches qui ne correspondent à aucun caractère imprimable ou de contrôle ASCII, par exemple les flèches de contrôle du curseur et les fonctions de traitement de texte . Les pressions de touches associées sont communiquées aux programmes informatiques par l'une des quatre méthodes suivantes : s'approprier des caractères de contrôle autrement inutilisés ; utiliser un codage autre que ASCII ; utiliser des séquences de contrôle à plusieurs caractères ; ou en utilisant un mécanisme supplémentaire en dehors de la génération de personnages. Les terminaux informatiques "muets" utilisent généralement des séquences de contrôle. Les claviers attachés à des ordinateurs personnels autonomes fabriqués dans les années 1980 utilisent généralement l'une (ou les deux) des deux premières méthodes. Les claviers d'ordinateur modernes génèrent des scancodes qui identifient les touches physiques spécifiques qui sont enfoncées ; le logiciel informatique détermine ensuite comment gérer les touches qui sont enfoncées, y compris l'une des quatre méthodes décrites ci-dessus.

Le but de la conception

Les caractères de contrôle ont été conçus pour tomber dans quelques groupes : contrôle d'impression et d'affichage, structuration des données, contrôle de transmission et divers.

Contrôle d'impression et d'affichage

Les caractères de contrôle d'impression ont d'abord été utilisés pour contrôler le mécanisme physique des imprimantes, le premier périphérique de sortie. Une première mise en œuvre de cette idée était les caractères de contrôle de chariot ASA hors bande . Plus tard, des caractères de contrôle ont été intégrés dans le flux de données à imprimer. Le caractère de retour chariot (CR), lorsqu'il est envoyé à un tel appareil, l'amène à placer le caractère sur le bord du papier où commence l'écriture (il peut, ou non, également déplacer la position d'impression à la ligne suivante). Le caractère de saut de ligne (LF/NL) amène l'appareil à placer la position d'impression sur la ligne suivante. Il peut (ou non), en fonction de l'appareil et de sa configuration, également déplacer la position d'impression au début de la ligne suivante (qui serait la position la plus à gauche pour les scripts de gauche à droite , tels que les alphabets utilisés pour Western langues, et la position la plus à droite pour les écritures de droite à gauche telles que les alphabets hébreu et arabe). Les caractères de tabulation verticaux et horizontaux (VT et HT/TAB) amènent le périphérique de sortie à déplacer la position d'impression jusqu'au taquet de tabulation suivant dans le sens de la lecture. Le caractère de saut de page (FF/NP) commence une nouvelle feuille de papier et peut ou non se déplacer au début de la première ligne. Le caractère de retour arrière (BS) déplace la position d'impression d'un espace de caractère vers l'arrière. Sur les imprimantes, cela est le plus souvent utilisé pour que l'imprimante puisse surimprimer des caractères pour créer d'autres caractères normalement non disponibles. Sur les terminaux et autres périphériques de sortie électroniques, il existe souvent des choix de configuration logicielle (ou matérielle) qui permettront un retour arrière destructif (c'est-à-dire une séquence BS, SP, BS) qui efface, ou non destructif qui ne le fait pas. Les caractères d'entrée et de sortie (SI et SO) sélectionnaient des jeux de caractères alternatifs, des polices, un soulignement ou d'autres modes d'impression. Les séquences d'échappement étaient souvent utilisées pour faire la même chose.

Avec l'avènement des terminaux informatiques qui n'imprimaient pas physiquement sur papier et offraient ainsi plus de flexibilité concernant le placement de l'écran, l'effacement, etc., les codes de contrôle d'impression ont été adaptés. Les sauts de page, par exemple, effacent généralement l'écran, car il n'y a pas de nouvelle page papier vers laquelle se déplacer. Des séquences d'échappement plus complexes ont été développées pour tirer parti de la flexibilité des nouveaux terminaux, et même des nouvelles imprimantes. Le concept d'un personnage de contrôle avait toujours été quelque peu limitatif, et l'était extrêmement lorsqu'il était utilisé avec un nouveau matériel beaucoup plus flexible. Les séquences de contrôle (parfois implémentées sous forme de séquences d'échappement) pouvaient correspondre à la nouvelle flexibilité et puissance et sont devenues la méthode standard. Cependant, il y avait, et reste, une grande variété de séquences standard parmi lesquelles choisir.

Structuration des données

Les séparateurs (Fichier, Groupe, Enregistrement et Unité : FS, GS, RS et US) ont été conçus pour structurer les données, généralement sur une bande, afin de simuler des cartes perforées . Fin du support (EM) avertit que la bande (ou tout autre support d'enregistrement) se termine. Alors que de nombreux systèmes utilisent CR/LF et TAB pour structurer les données, il est possible de rencontrer les caractères de contrôle du séparateur dans les données qui doivent être structurées. Les caractères de contrôle de séparation ne sont pas surchargés ; il n'y a pas d'utilisation générale d'entre eux, sauf pour séparer les données en groupes structurés. Leurs valeurs numériques sont contiguës au caractère espace, qui peut être considéré comme un membre du groupe, en tant que séparateur de mots.

Contrôle de la transmission

Les caractères de contrôle de transmission étaient destinés à structurer un flux de données et à gérer la retransmission ou l'échec normal, selon les besoins, face aux erreurs de transmission.

Le caractère de début de cap (SOH) était de marquer une section non-données d'un flux de données - la partie d'un flux contenant des adresses et d'autres données d'entretien. Le caractère de début de texte (STX) marquait la fin de l'en-tête et le début de la partie textuelle d'un flux. Le caractère de fin de texte (ETX) marquait la fin des données d'un message. Une convention largement utilisée consiste à faire des deux caractères précédant ETX une somme de contrôle ou un CRC à des fins de détection d'erreurs. Le caractère de bloc de fin de transmission (ETB) était utilisé pour indiquer la fin d'un bloc de données, où les données étaient divisées en de tels blocs à des fins de transmission.

Le caractère d'échappement ( ESC ) était destiné à « citer » le caractère suivant, s'il s'agissait d'un autre caractère de contrôle, il l'imprimerait au lieu d'exécuter la fonction de contrôle. Il n'est presque jamais utilisé à cette fin aujourd'hui. Divers caractères imprimables sont utilisés comme " caractères d'échappement " visibles , selon le contexte.

Le caractère de substitution ( SUB ) était destiné à demander une traduction du caractère suivant d'un caractère imprimable vers une autre valeur, généralement en mettant le bit 5 à zéro. C'est pratique car certains supports (comme les feuilles de papier produites par des machines à écrire) ne peuvent transmettre que des caractères imprimables. Cependant, sur les systèmes MS-DOS avec des fichiers ouverts en mode texte, "fin de texte" ou "fin de fichier" est marqué par ce caractère Ctrl-Z , au lieu de Ctrl-C ou Ctrl-D , qui sont communs sur d'autres systèmes d'exploitation.

Le caractère d'annulation ( CAN ) signalait que l'élément précédent devait être supprimé. Le caractère d'accusé de réception négatif ( NAK ) est un indicateur défini pour, généralement, noter que la réception était un problème et, souvent, que l'élément actuel devrait être envoyé à nouveau. Le caractère d' accusé de réception ( ACK ) est normalement utilisé comme indicateur pour indiquer qu'aucun problème n'a été détecté avec l'élément actuel.

Lorsqu'un support de transmission est semi-duplex (c'est-à-dire qu'il ne peut transmettre que dans une seule direction à la fois), il y a généralement une station maître qui peut transmettre à tout moment, et une ou plusieurs stations esclaves qui transmettent lorsqu'elles en ont l'autorisation. Le caractère d'interrogation ( ENQ ) est généralement utilisé par une station maître pour demander à une station esclave d'envoyer son prochain message. Une station esclave indique qu'elle a terminé sa transmission en envoyant le caractère de fin de transmission ( EOT ).

Les codes de contrôle des appareils (DC1 à DC4) étaient à l'origine génériques, à mettre en œuvre selon les besoins par chaque appareil. Cependant, un besoin universel dans la transmission de données est de demander à l'expéditeur d'arrêter la transmission lorsqu'un destinataire est temporairement incapable d'accepter plus de données. Digital Equipment Corporation a inventé une convention qui utilisait 19 (le caractère de contrôle de périphérique 3 ( DC3 ), également connu sous le nom de contrôle-S ou XOFF ) à la transmission "S" top, et 17 (le caractère de contrôle de périphérique 1 ( DC1 ), alias contrôle -Q ou XON ) pour démarrer la transmission. Il est devenu si largement utilisé que la plupart ne réalisent pas qu'il ne fait pas partie de l'ASCII officiel. Cette technique, cependant mise en œuvre, évite des fils supplémentaires dans le câble de données consacrés uniquement à la gestion de la transmission, ce qui permet de réaliser des économies. Un protocole sensé pour l'utilisation de tels signaux de contrôle de flux de transmission doit être utilisé, pour éviter cependant des conditions potentielles d'interblocage.

Le caractère d'échappement de liaison de données ( DLE ) était destiné à être un signal à l'autre extrémité d'une liaison de données que le caractère suivant est un caractère de contrôle tel que STX ou ETX. Par exemple un paquet peut être structuré de la manière suivante ( DLE ) <STX> <PAYLOAD> ( DLE ) <ETX>.

Codes divers

Le code 7 ( BEL ) est destiné à provoquer un signal sonore dans le terminal récepteur.

De nombreux caractères de contrôle ASCII ont été conçus pour des appareils de l'époque que l'on ne voit pas souvent aujourd'hui. Par exemple, le code 22, "synchrone inactif" ( SYN ), était à l'origine envoyé par des modems synchrones (qui doivent envoyer des données en permanence) alors qu'il n'y avait pas de données réelles à envoyer. (Les systèmes modernes utilisent généralement un bit de départ pour annoncer le début d'un mot transmis - il s'agit d'une caractéristique de la communication asynchrone . Les liaisons de communication synchrones étaient plus souvent observées avec les ordinateurs centraux, où elles étaient généralement exécutées sur des lignes louées d'entreprise pour connecter un ordinateur central à un autre. ordinateur central ou peut-être un mini-ordinateur.)

Le code 0 (nom de code ASCII NUL ) est un cas particulier. Dans le ruban de papier, c'est le cas lorsqu'il n'y a pas de trous. Il est pratique de traiter cela comme un caractère de remplissage sans signification par ailleurs. Étant donné que la position d'un caractère NUL n'a pas de trous perforés, il peut être remplacé par n'importe quel autre caractère ultérieurement, il était donc généralement utilisé pour réserver de l'espace, soit pour corriger des erreurs, soit pour insérer des informations qui seraient disponibles ultérieurement. ou dans un autre endroit. En informatique, il est souvent utilisé pour le remplissage dans des enregistrements de longueur fixe et, plus communément, pour marquer la fin d'une chaîne.

Le code 127 ( DEL , alias "rubout") est également un cas particulier. Son code à 7 bits est entièrement binaire en binaire, ce qui efface essentiellement une cellule de caractère sur une bande de papier lorsqu'elle est trop perforée. La bande de papier était un support de stockage courant lorsque l'ASCII a été développé, avec une histoire informatique remontant à l'équipement de décryptage de la Seconde Guerre mondiale à Biuro Szyfrów . La bande de papier est devenue obsolète dans les années 1970, de sorte que cet aspect intelligent de l'ASCII a rarement été utilisé par la suite. Certains systèmes (comme les Apples d'origine) l'ont converti en un retour arrière. Mais parce que son code est dans la plage occupée par d'autres caractères imprimables, et parce qu'il n'avait pas de glyphe officiel assigné, de nombreux fournisseurs de matériel informatique l'ont utilisé comme caractère imprimable supplémentaire (souvent un caractère « boîte » entièrement noir utile pour effacer du texte par surimpression avec de l'encre).

Les mémoires mortes programmables non effaçables sont généralement implémentées sous forme de réseaux d'éléments fusibles, chacun représentant un bit , qui ne peut être commuté que dans un sens, généralement de un à zéro. Dans de telles PROM, les caractères DEL et NUL peuvent être utilisés de la même manière qu'ils étaient utilisés sur une bande perforée : l'un pour réserver des octets de remplissage sans signification qui peuvent être écrits plus tard, et l'autre pour convertir les octets écrits en octets de remplissage sans signification. Pour les PROM qui passent de un à zéro, les rôles de NUL et DEL sont inversés ; De plus, DEL ne fonctionnera qu'avec des caractères 7 bits, qui sont rarement utilisés aujourd'hui ; pour le contenu 8 bits, le code de caractère 255, généralement défini comme un espace insécable, peut être utilisé à la place de DEL.

De nombreux systèmes de fichiers n'autorisent pas les caractères de contrôle dans les noms de fichiers , car ils peuvent avoir des fonctions réservées.

Voir également

Notes et références

Liens externes