web-dev-qa-db-fra.com

Comment \ n et \ r sont 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. Donc, si je me trompe, corrigez-moi s'il vous plaît ...

Quoi qu'il en soit, on m'a dit que Windows et Linux géraient newlines et carriage returns différemment. J'aimerais savoir comment ils les gèrent différemment et quels sont les endroits où il est important de se souvenir. Merci de répondre.

20
千里ちゃん

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 surtout une curiosité historique. À l’origine, le saut de ligne (LF) était utilisé pour faire avancer le papier d’une ligne sur les imprimantes et les terminaux papier ( des téléimprimeurs ); Le retour chariot (CR) a renvoyé la tête d’impression au début de la ligne.

Cela fonctionne probablement encore sur les imprimantes modernes lorsqu'il est utilisé en "mode texte", mais est autrement sans intérêt aujourd'hui.

Quoi qu'il en soit, on m'a dit que Windows et Linux gèrent les retours à la ligne 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 de texte dans 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 ne concerne en réalité que les programmes qui traitent du "texte brut", et il n’y en a pas beaucoup - il ne concerne que le code source du programme, les fichiers de configuration et certains fichiers texte simples avec documentation. De nos jours, la plupart des programmes manipulant ce type de fichiers (éditeurs, compilateurs, etc.) peuvent gérer les deux conventions de nouvelle ligne. Par conséquent, peu importe celle que vous choisissez.

Dans certains cas, les outils insistent sur "leur" convention de nouvelle ligne (par exemple, les scripts Unix Shell ne doivent pas utiliser CR + LF), auquel cas vous devez utiliser la bonne.

18
sleske

CR et LF

Les caractères de contrôle définis par le code standard américain pour l’échange d’informations (ASCII), 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 de manière analogue à la machines à écrire mécaniques qui ont précédé les premiers imprimeurs d’ordinateurs.

Dépendance de la plateforme

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

Dans les anciens systèmes Apple Macintosh (antérieurs à OSX), le séparateur de lignes traditionnel dans les fichiers texte était CR

Sous Unix et Linux, le séparateur de lignes 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) sur une ligne. Dans une imprimante ou une machine à écrire, le papier serait déplacé d’une ligne vers le haut.

Invariablement \r signifie le caractère ASCII CARRIAGE-RETURN (CR) dont le nom vient en réalité de machines à écrire mécaniques sur lesquelles une clé de retour de chariot entraînait le déplacement du rouleau ("chariot") à droite, alimenté par un ressort, aussi loin que cela irait. Définissant ainsi la position de frappe actuelle dans la marge gauche.

La 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 les lignes d'un fichier texte. Par exemple, en Perl, print "\n" génère une séquence de caractères différente sous Linux que sous Windows.

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

Unix stty

Dans un shell Unix, la commande stty peut être utilisée pour faire en sorte que le shell traduise ces différentes conventions. Par exemple, stty -onlcr fera en sorte que le shell traduise ensuite 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 utilisés - PCL et Postscript.

12
RedGrittyBrick

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 les deux méthodes CR et LF en utilisant \r\n et, dans la plupart des cas, cela fonctionnera correctement.

3
James Billingham