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 ...
Quoi qu'il en soit, on m'a dit que Windows et Linux gèrent newlines
et carriage returns
différemment. Je voudrais savoir comment ils les traitent différemment et certains endroits où il est important de se souvenir. Merci de répondre.
linux
windows
newlines
carriage-return
千里 ち ゃ ん
la source
la source
\r\n
c'est correct dans Windows mais ce\n\r
n'est pas le cas, et je m'en souviens parce que\r\n
c'est un acronyme pour infirmière autorisée. J'entends également que\n
c'est ce que les gens utilisent sous Linux et\r
n'est pas utilisé seul dans le même but que\r\n
.\r
est utilisé dans un MacOS vraiment ancien. Je n'ai cependant pas vérifié ces faits.\r
et\n
, puisque la façon dont cela\n
est géré dépend de l'endroit où vous l'utilisez. Mieux vaut les appelerCR
etLF
.Réponses:
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 ( téléimprimeurs ); le retour chariot (CR) a renvoyé la tête d'impression au début de la ligne.
Cela fonctionne probablement toujours sur les imprimantes modernes lorsqu'il est utilisé en "mode texte", mais il est autrement peu pertinent aujourd'hui.
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 n'est vraiment pertinent que pour les programmes qui traitent du "texte brut", et il n'y en a pas beaucoup - il affecte principalement uniquement 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 ces types de fichiers (éditeurs, compilateurs, etc.) peuvent gérer les deux conventions de nouvelle ligne, donc peu importe celle que vous choisissez.
Dans certains cas, les outils insistent sur "leur" convention de nouvelle ligne (par exemple, les scripts shell Unix ne doivent pas utiliser CR + LF), auquel cas vous devez utiliser la bonne.
la source
\n\r
et\n
sont-ils les mêmes? Par exemple, si j'analysais un fichier texte qui a été modifié sur le PC de quelqu'un d'autre et qui contenait à la fois la version Linux et Windows des sauts de ligne, effectuer unpreg_match
for\n
et\n\r
me donner des résultats différents?CR et LF
L'American Standard Code for Information Interchange (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 à la machines à écrire mécaniques qui ont précédé les premières imprimantes informatiques.
Dépendance à la plateforme
Sous Windows, le séparateur de ligne traditionnel dans les fichiers texte est CR suivi de LF
Dans les anciens systèmes Apple Macintosh (antérieurs à 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) d'une ligne vers le bas. Dans une imprimante ou une machine à écrire, cela déplacerait le papier d'une ligne.Invariablement
\r
signifie le caractère ASCII CARRIAGE-RETURN (CR) dont le nom provient en fait de machines à écrire mécaniques où il y avait une touche de retour chariot qui a fait déplacer le rouleau ("chariot") qui portait le papier vers la droite, alimenté par un ressort, aussi loin que cela irait. Définissant ainsi la position de frappe actuelle sur la marge gauche.Programmation
Dans certains langages de programmation, cela
\n
peut signifier une séquence de caractères dépendante 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 sur Linux que sur 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 les utiliser
\n
ou pas\r
du tout. Vous devez utiliserSystem.getProperty("line.separator")
. Vous devez utiliser\n
et\r
où vous voulez LF et CR indépendamment de la plate-forme (par exemple, comme utilisé dans HTTP, FTP et autres protocoles de communication Internet).Unix stty
Dans un shell Unix, la
stty
commande peut être utilisée pour faire traduire le shell entre ces différentes conventions. Par exemplestty -onlcr
, le shell traduira 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 des fichiers 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.
la source
line.separator
. Cela dépend vraiment de ce que vous voulez.println()
utilise automatiquementline.separator
, donc si vous voulez des fins de ligne natives, vous pouvez utiliserprintln()
(et si vous avez besoin d'un certain type spécifique de fin de ligne, alors ne l'utilisez pas, mais utilisez "\ n" etc. explicitement).\n
existe un caractère de contrôle autre que ASCII LF (autre que les systèmes basés sur EBCDIC)? Je fais référence à ce que\n
signifie un littéral de chaîne ou de caractère, pas à l'effet de l'envoyer à un fichier ou à un périphérique de sortie.\n
est toujours le code ASCII (et Unicode) 10, car le JLS le dit explicitement (JLS 3.10.6, "Séquences d'échappement pour les littéraux de caractères et de chaînes" - j'ai vérifié :-)). Pour les autres langues - bonne question.Bref, c'était nécessaire pour les imprimantes, mais maintenant les OS le font légèrement différemment. Dans la plupart des cas, il est correct de faire à la fois CR et LF en faisant
\r\n
et dans la plupart des cas, cela fonctionnera bien.la source
\r
ou provoque-t-il une sorte de changement de comportement?