Question Pourquoi les caractères spéciaux tels que "retour chariot" sont-ils représentés par "^ M"?


Pourquoi est-ce ^M utilisé pour représenter un retour chariot dans VIM et d'autres contextes? 

Je suppose que c'est M est la 13ème lettre de l'alphabet latin et un retour chariot est \x0D ou décimal 13. Est-ce la raison? Cette représentation est-elle documentée n'importe où?

Je remarque que Tab est représenté par ^I, qui est la neuvième lettre de l'alphabet latin. Inversement, Tab est \x09 ou décimal 9, qui soutient ma théorie énoncée ci-dessus. Cependant, où cela pourrait-il être documenté comme un fait?


91
2018-06-05 08:31


origine


Gardez également à l'esprit que dos / windows utilisent "0x0d 0x0a", également noté "CR LF". Mais unix / linux n'utilise que "0x0a" ou "LF". Donc, lorsque vous ouvrez un document Windows dans Linux, il détecte un "CR" supplémentaire, et lorsque vous ouvrez un document Linux dans Windows, il ne détecte pas de nouvelles lignes. - LatinSuD
La notation @LatinSuD caret (et l'utilisation correspondante de la touche Ctrl) se rapporte directement à l'ensemble de contrôles C0 (historiquement partie de ASCII) et non à la manière dont un système d'exploitation ou un programme donné utilise une partie de ces lignes autre. De même, si ^Hsupprime un caractère ou permet la surimpression (comme n^H~ comme un moyen obsolète de produire ñ) ou tout autre réel utilisation du caractère de contrôle est distinct de la notation caret. - Jon Hanna
ancien ... Je ne me souviens plus du code original, mais ctrl-G sonne une cloche! - Brian Drummond
@OlivierDulac non, le ^ M est exactement un retour chariot, tout comme ^ J est exactement un saut de ligne. Bien que les différents systèmes d’exploitation aient des vues différentes sur le retour à la ligne et / ou le retour chariot ou autre chose (comme le caractère Newline utilisé par certains caractères IBM mais ne faisant pas partie de l’héritage historique de certains autres systèmes), Représenter une nouvelle ligne dans un fichier texte, et alors que certains programmes ont changé cela de différentes manières, U + 000D lui-même est toujours un retour chariot, quels que soient les systèmes d'exploitation ultérieurs comme Unix ou DOS. (Bien sûr, en l'appelant ... - Jon Hanna
@OlivierDulac ... U + 000D est proleptique, puisque ce nom est venu avec Unicode dans les années 1990, mais cela fait sans aucun doute référence au code tel qu'il existait en ASCII en 1963 et comme il existait dans le code Baudot modifié de Murray en 1901. Murray résolvait des problèmes liés au déplacement du papier avec les mêmes outils utilisés dans le concept de «fichier texte» plusieurs décennies plus tard. Marteau une vis dans quelque chose comme un clou, et c'est toujours une vis. Utilisez LF et / ou CR pour représenter la fin d'une ligne dans un fichier texte, et ils sont toujours des retours à la ligne et des retours chariot. - Jon Hanna


Réponses:


Je crois que ce que OP demandait en fait est appelé Notation Caret.

La notation Caret est une notation pour les caractères de contrôle non imprimables en codage ASCII. La notation consiste en un caret (^) suivi d'une majuscule; Ce digraphe représente le code ASCII qui a la valeur numérique équivalente à la valeur numérique de la lettre. Par exemple, le caractère EOT avec une valeur de 4 est représenté par ^ D car D est la 4ème lettre de l'alphabet. Le caractère NUL avec une valeur de 0 est représenté par ^ @ (@ est le caractère ASCII avant A). Le caractère DEL avec la valeur 127 est généralement représenté par ^?, Car l'ASCII '?' est avant "@" et -1 est le même que 127 s'il est masqué à 7 bits. Une autre formulation de la traduction est que le caractère imprimé est trouvé en inversant le 7ème bit du code ASCII

La liste complète des caractères de contrôle ASCII avec la notation caret peut être trouvée ici

Concernant vim et les autres éditeurs de texte: vous ne verrez généralement ^ M que si vous ouvrez un fichier texte au format Windows (CRLF) dans un éditeur qui attend les fins de ligne Linux (LF). Le 0x0A est rendu comme un saut de ligne, le 0x0D juste avant qu'il soit imprimé en tant que ^ M. La plupart du temps, les paramètres par défaut de l'éditeur incluent «reconnaître automatiquement les fins de ligne».


114
2018-06-05 09:12



Je me suis toujours demandé ce que cette chose s'appelait ... - smci
Cette convention remonte au moins aux années 1970; Je l’ai vu pour la première fois sur le système d’exploitation TOPS-10, mais il se pourrait bien qu’il ait existé plus tôt. Pour ce qui est de la valeur, sur les anciens terminaux ASCII, le caractère maintenant affiché comme un caret était en réalité une flèche dirigée vers le haut, donc il s’agissait d’une "notation étroite". - keshlam
Ceci est explicitement intégré dans la conception ASCII de sorte que la touche Ctrl permute simplement le bit 7. - OrangeDog
Il n'est pas utilisé uniquement avec des lettres. Je ne le définirais pas comme caractère de contrôle avec "la valeur numérique de la lettre" mais plutôt comme "xor 64". En d'autres termes, ^A est 0x41 xor 0x40, ou 0x01 et ^? est 0x3F xor 0x40, ou 0x7F. - R..
Ascii DEL (^?) N'a rien à voir avec la touche de suppression. C'est en fait le code standard généré par le <--- clé (aussi, confuse, appelée retour arrière) sur les terminaux de type VT100. - R..


C'est exactement la raison.

ASCII définit les caractères 0 à 31 comme des codes de contrôle non imprimables. Voici un extrait du ascii(7) page de manuel d'un système Linux aléatoire (man ascii), jusqu'au CR inclus (13):

   Oct   Dec   Hex   Char                       
   ─────────────────────────────────────────────
   000   0     00    NUL '\0'                    
   001   1     01    SOH (start of heading)     
   002   2     02    STX (start of text)         
   003   3     03    ETX (end of text)           
   004   4     04    EOT (end of transmission)   
   005   5     05    ENQ (enquiry)               
   006   6     06    ACK (acknowledge)           
   007   7     07    BEL '\a' (bell)             
   010   8     08    BS  '\b' (backspace)       
   011   9     09    HT  '\t' (horizontal tab)  
   012   10    0A    LF  '\n' (new line)        
   013   11    0B    VT  '\v' (vertical tab)    
   014   12    0C    FF  '\f' (form feed)       
   015   13    0D    CR  '\r' (carriage ret)    

Conventionnellement, ces caractères sont générés avec Contrôle et la lettre relative au caractère requis. Les «télétypes» et les premiers claviers terminaux avaient «BELL» écrit au-dessus du g clé pour cette raison.

Le document de normes qui définit ASCII est ASA X3.4-1963, publié par l’American Standards Association en 1963. Je ne trouve pas le document original sur leur site Web, mais cet extrait du document original montre la table de caractères, y compris les codes de contrôle ci-dessus.


22
2018-06-05 08:38



Je vous remercie. Bien qu'informative, cette réponse ne contient pas la réponse à la question. - dotancohen
La réponse est cachée dans le deuxième paragraphe: ^M est un raccourci pour Control-M. Sur le terminal, vous appuierez sur la touche Control avec la touche M pour envoyer le kode ASCII 0x0D, également appelé retour chariot. - Martin Liversage


La notation remonte aux premiers télétypes ASCII (vers 1963). Il y avait une clé CTRL qui basculait le bit 0x40 pour que CTRL-M (retour chariot) soit 0D au lieu de 4D, CTRL-G (bell) serait 07 au lieu de 47, CTRL-L (flux de formulaire) serait 0C de 4C.

Il n'y avait pas de "conception" dans l'attribution de lettres particulières à des fonctions particulières, il était juste que, lorsque la poussière s'estompait en assignant des codes ASCII, la clé M différait du retour chariot et le retour chariot devenait CTRL-M.

Voici le meilleur cliché que je puisse trouver sur un clavier ASR33. Comme vous pouvez le voir, les noms des caractères de contrôle sont imprimés en petites lettres sur les touches alpha correspondantes.

Teletype Model 33 ASR with paper tape punch/reader

Image par Marcin Wichary, utilisateur: AlanM1 (dérivé (recadré) de Fichier: ASR-33 2.jpg) [CC BY 2.0], via Wikimedia Commons

La clé M n'a pas de notation car il y a une touche "RETOUR" dédiée, CTRL-M est donc redondant.


13
2018-06-06 22:01



À un certain niveau, la mesure dans laquelle nous sommes toujours liés par des choix de conception faits pour ce qui semble être maintenant des systèmes anciens est assez surprenante - je pense que (a) il n'y a pas si longtemps, le rythme des changements dans l'intervalle a été stupéfiant, et (b) si suffisamment de décisions de conception sont prises, certaines d’entre elles (en particulier celles qui ne causent pas assez de problèmes aux personnes) sont tenues de rester longtemps après que les raisons de leur disparition sont entrées dans leur mémoire. Encore un étrange sentiment de regarder l'histoire de certaines de ces choses. - Stuart Golodetz
@StuartGolodetz - En fait, je trouve cela étrangement rassurant. Mais je me souviens alors que les télétypes étaient des "technologies avancées". (Soit dit en passant, le Teletype ASR-33 était remarquable par sa simplicité élégante. Je souhaite seulement que les systèmes informatiques «modernes» soient aussi bien conçus.) - Daniel R Hicks
C'est fascinant mais ce que je ne comprends pas, c'est pourquoi toutes les choses ont-elles décidé que cette machine à écrire avait besoin d'une cloche? - CaptainCodeman
@CaptainCodeman - Lorsque vous avez transmis un message important, vous devez sonner pour attirer l’attention de l’opérateur. - Daniel R Hicks
Il est intéressant de noter que la touche Ctrl survit encore aujourd'hui sur les claviers PC. - Daniel R Hicks


Le signe d'insertion (^) est juste un raccourci pour écrire la touche CTRL - Ctrl.

Dans le bon vieux temps, vous pouvez taper directement ces codes (voir ci-dessus), la touche Ctrl + G (^ G) rendrait le terminal "ding"

Lorsque vous souhaitez ajouter un CR dans Vim, vous utilisez la touche Ctrl + M etc tab = Ctrl + I


2
2018-06-06 14:32



Le terme que vous recherchez est digraphe, ce qui signifie deux caractères qui représentent un caractère. Plus précisément, les digraphes et les trigraphes sont utilisés pour représenter des caractères non imprimables. Historiquement, ils ont également été utilisés pour les caractères qui n'apparaissent pas sur un clavier, bien que, avec les interfaces graphiques et les claviers modernes, cela pose moins de problèmes, ce qui rend cette utilisation plus archaïque.
"Au bon vieux temps" est encore aujourd'hui, avec ^ C et ^ D étant parfaitement fonctionnels. La seule raison pour laquelle ^ G ne fait plus le ding terminal est que la plupart des émulateurs de terminaux ont cette réponse désactivée. - SevenSidedDie


La nécessité d'une manière visuelle d'afficher ce qui est par définition des caractères non imprimables.

Donc, quelqu'un au début des années 70 (ou peut-être plus tôt) (je me souviens l'avoir vu sur CP / M, et quelqu'un d'autre a déjà mentionné TOPS) a décidé que "caret plus letter" serait le symbole des 26 caractères de contrôle ASCII non imprimables avec des valeurs 1 à 26. La valeur 0 est / a été imprimée en tant que ^ @ et la valeur 127 en tant que ^ ?.


2
2018-06-09 00:51





Où est-il documenté, bien cette page répertorie tous les caractères de contrôle, avec comment entrer / le représenter avec la clé de contrôle (bien que le premier, le caractère ascii 0, n’a pas de représentation de la clé de contrôle) il fournit des sources au bas

https://www.cs.tut.fi/~jkorpela/chars/c0.html

On peut se demander, étant donné qu'il y a 33 caractères de contrôle (caractères ASCII 0-31 donc 32 caractères, + caractère 127. soit, = 33 caractères) Comment ils seraient tous représentés car il n'y a que 26 lettres dans l'alphabet. Eh bien, il utilise Ctrl-A pour le caractère Ascii 1, Ctrl-Z pour le caractère ascii 26, et là, une fois qu'il atteint Ctrl-Z, il utilise [  \  ]  ^  _ 

Il répertorie Ctrl-Z comme SUB, bien que sous DOS et l'invite de commande, il s'agit de EOF, et en tant qu'utilisateur technophile, vous l'utilisez quand vous le faites. copy con a.a où a.a est votre fichier Vous saisissez le texte et terminez-le avec Ctrl-Z, ce qui, curieusement, n'entre pas dans un marqueur EOF. Mais indique à CMD la fin du fichier, CMD l’écrit.

Cette page Web cs.tut.fi donne ceci comme source
http://www.wps.com/texts/codes/X3.4-1963/index.html

mais c'est un lien cassé, mais disponible sur archive.org, il se présente sous la forme de fichiers JPG

Code américain normalisé pour l'échange d'information
Norme ASA X3.4-1963

https://web.archive.org/web/20010430085116/http://www.wps.com/texts/codes/X3.4-1963/index.html


1
2018-06-05 18:25



La plupart des caractères de contrôle n'ont pas de sens, mais même certains de ceux qui ont une signification comme Ctrl-I ne sont pas sûrs de savoir où faire Ctrl-I et obtenir un onglet. - barlop
aucun des caractères de contrôle n'a de sens. Beaucoup d'entre eux ne sont pas utilisés dans de nombreux contextes, mais chacun a au moins un sens. - Jon Hanna
@JonHanna Bien sûr, je ne veux pas dire qu'ils n'avaient pas de sens (au passé) .Mais R.Have n'a pas eu de sens depuis des décennies, c'est-à-dire qu'ils avaient leur signification d'origine depuis des années, la technologie qui ne fonctionne plus, w / actuel et même légèrement tech.n si certains sont mis à des utilisations modernes, ce n'est pas beaucoup. Il y a une liste ici en.wikipedia.org/wiki/Control_character  de ceux d'usage courant 0,7,8,9,10,11,12,13,127. 9/33 donc les autres (24 d'entre eux) vous seriez très rarement ou pas du tout comme ils étaient aussi morts que la machine inutilisée pendant des décennies, ils étaient utilisés sur - barlop
Associated Press utilise toujours ANPA-1312, qui utilise 1-4, 6 et 16 pour démarrer chaque connexion TCP / IP. Les imprimantes modernes (entre autres) utilisent toujours les imprimantes 17 et 19. Avec celles que vous mentionnez, nous en avons un certain pourcentage sans vraiment essayer. Je vais vous accorder qu'ils ne sont pas dans lourd utiliser, mais ils ne sont pas morts non plus. - Jon Hanna
@barlop Vous pouvez faire ^I pour un onglet en standard bash: type ls ~/^I^I et vous devriez voir tous les dossiers dans votre répertoire personnel. - wchargin


Vous pouvez voir tous les caractères ASCII non acceptables Contrôle cartographie dans ce table.


0
2018-06-05 08:46



Bien que cela puisse théoriquement répondre à la question, ce serait préférable inclure les parties essentielles de la réponse ici, et fournir le lien pour référence. De cette façon, si la page liée devait changer ou devenir invalide pour une raison quelconque, la réponse serait toujours utile aux visiteurs de Super User. - Michael Kjörling
Je vous remercie. Bien qu'informative, cette réponse ne contient pas la réponse à la question. - dotancohen