GNU/Linux >> Tutoriels Linux >  >> Linux

Comment \n et \r sont-ils gérés différemment sous Linux et Windows ?

Je pense que \n déplace l'aiguille vers le bas et \r déplace l'aiguille au début d'une ligne (alignement à gauche) ? Je ne suis pas sûr, cependant

C'est vrai, plus ou moins, mais c'est surtout une curiosité historique. À l'origine, le saut de ligne (LF) servait à faire avancer le papier d'une ligne sur les imprimantes et les terminaux papier (téléimprimeurs); le retour chariot (CR) ramène la tête d'impression au début de la ligne.

Cela fonctionne probablement encore sur les imprimantes modernes lorsqu'elles sont utilisées en "mode texte", mais n'a par ailleurs que peu d'importance aujourd'hui.

Quoi qu'il en soit, on m'a dit que Windows et Linux gèrent les nouvelles lignes et les retours chariot différemment.

La différence est simple :les concepteurs de systèmes d'exploitation devaient choisir comment représenter le début d'une nouvelle ligne dans le texte des fichiers informatiques. Pour diverses raisons historiques, dans le monde Unix/Linux, un seul caractère LF a été choisi comme marqueur de nouvelle ligne; MS-DOS a choisi CR+LF, et Windows en a hérité. Ainsi, différentes plates-formes utilisent différentes conventions.

En pratique, cela devient de moins en moins un problème. Le marqueur de nouvelle ligne n'est vraiment pertinent que pour les programmes qui traitent du "texte brut", et il n'y en a pas beaucoup - il n'affecte principalement que le code source du programme, les fichiers de configuration et certains fichiers texte simples avec documentation. De nos jours, la plupart des programmes gérant ce type de fichiers (éditeurs, compilateurs, etc.) peuvent gérer les deux conventions de retour à la ligne, donc peu importe celle que vous choisissez.

Il y a des cas où les outils insistent sur "leur" convention de retour à la ligne (par exemple, les scripts shell Unix ne doivent pas utiliser CR+LF), auquel cas vous devez utiliser la bonne.


CR et LF

Le code standard américain pour l'échange d'informations (ASCII) définit les caractères de contrôle, y compris CARRIAGE-RETURN (CR) et LINE-FEED (LF) qui étaient (et sont toujours) utilisés pour contrôler la position d'impression sur les imprimantes d'une manière analogue au machines à écrire mécaniques qui ont précédé les premières imprimantes informatiques.

Dépendance à la plate-forme

Sous Windows, le séparateur de ligne traditionnel dans les fichiers texte est CR suivi de LF

Dans les anciens systèmes Apple Macintosh (avant OSX), le séparateur de ligne traditionnel dans les fichiers texte était CR

Sous Unix et Linux, le séparateur de ligne traditionnel dans les fichiers texte est LF.

\n et \r

Dans de nombreux langages de programmation et de script \n signifie "nouvelle ligne". Parfois (mais pas toujours), cela signifie le caractère ASCII LINE-FEED (LF), qui, comme vous le dites, déplace le curseur (ou la position d'impression) vers le bas d'une ligne. Dans une imprimante ou une machine à écrire, cela ferait remonter le papier d'une ligne.

Invariablement \r désigne le caractère ASCII RETOUR CHARIOT (CR) dont le nom vient en fait des machines à écrire mécaniques où il y avait une touche de retour chariot qui faisait déplacer le rouleau ("chariot") qui portait le papier vers la droite, actionné par un ressort, comme aussi loin que ça irait. Définissant ainsi la position de frappe actuelle sur la marge de gauche.

Programmation

Dans certains langages de programmation \n peut signifier une séquence de caractères dépendant de la plate-forme qui termine ou sépare des lignes dans un fichier texte. Par exemple en Perl, print "\n" produit une séquence de caractères différente sous Linux que sous Windows.

En Java, la meilleure pratique, si vous souhaitez utiliser les fins de ligne natives pour la plate-forme d'exécution, est de ne pas utiliser \n ou \r du tout. Vous devez utiliser System.getProperty("line.separator") . Vous devez utiliser \n et \r où vous voulez LF et CR quelle que soit la plate-forme (par exemple, comme utilisé dans HTTP, FTP et d'autres protocoles de communication Internet).

Sty Unix

Dans un shell Unix, le stty La commande peut être utilisée pour amener le shell à traduire entre ces diverses conventions. Par exemple stty -onlcr obligera le shell à traduire par la suite tous les LF sortants en CR LF.

Linux et OSX suivent les conventions Unix

Fichiers texte

Les fichiers texte sont toujours extrêmement importants et largement utilisés. Par exemple, HTML et XML sont des exemples de fichier texte. La plupart des protocoles Internet importants, tels que HTTP, suivent les conventions de fichier texte et incluent des spécifications pour les fins de ligne.

Imprimantes

La plupart des imprimantes autres que les moins chères respectent toujours CR et LF. En fait, ils sont fondamentaux pour les langages de description de page les plus largement utilisés - PCL et Postscript.


En bref, c'était nécessaire pour les imprimantes, mais maintenant, les systèmes d'exploitation le font légèrement différemment. Dans la plupart des cas, il suffit de faire à la fois CR et LF en faisant \r\n et dans la plupart des cas, cela fonctionnera bien.


Linux
  1. Comment double-booter Linux et Windows

  2. Comment double-booter Kali Linux et Windows 10

  3. Comment accéder aux systèmes de fichiers Linux dans Windows 10 et WSL 2

  4. Comment installer Wine et exécuter des applications Windows sous Linux

  5. Comment effectuer un double démarrage de Windows 10 et de MX Linux

Comment installer et utiliser Sublime Text 4 sous Linux

Comment faire un double démarrage Linux Mint et Windows 10 [Guide du débutant]

Comment faire un double démarrage Antergos Linux et Windows UEFI

Comment partager des fichiers de jeu Steam entre Linux et Windows

Comment convertir un fichier .pem en un fichier .ppk sous Windows et Linux

Comment installer et configurer le sous-système Windows pour Linux