CR y LF
El Código Estándar Americano para el Intercambio de Información (ASCII) definió caracteres de control que incluyen CARRIAGE-RETURN (CR) y LINE-FEED (LF) que fueron (y aún son) utilizados para controlar la posición de impresión en impresoras de una manera análoga a máquinas de escribir mecánicas que precedieron a las primeras impresoras informáticas.
Dependencia de la plataforma
En Windows, el separador de línea tradicional en los archivos de texto es CR seguido de LF
En los sistemas Apple Macintosh antiguos (anteriores a OSX), el separador de línea tradicional en los archivos de texto era CR
En Unix y Linux, el separador de línea tradicional en los archivos de texto es LF.
\ n y \ r
En muchos lenguajes de programación y scripting \n
significa "nueva línea". A veces (pero no siempre) esto significa el carácter ASCII LINE-FEED (LF), que, como usted dice, mueve el cursor (o la posición de impresión) una línea hacia abajo. En una impresora o máquina de escribir, esto realmente movería el papel una línea hacia arriba.
Invariablemente \r
significa el carácter ASCII CARRIAGE-RETURN (CR) cuyo nombre en realidad proviene de máquinas de escribir mecánicas donde había una tecla de retorno de carro que hacía que el rodillo ("carro") que llevaba el papel se moviera hacia la derecha, accionado por un resorte, tan lejos como fuera posible. Por lo tanto, establecer la posición de escritura actual en el margen izquierdo.
Programación
En algunos lenguajes de programación \n
puede significar una secuencia de caracteres dependiente de la plataforma que termina o separa líneas en un archivo de texto. Por ejemplo, en Perl, print "\n"
produce una secuencia de caracteres diferente en Linux que en Windows.
En Java, la mejor práctica, si desea utilizar las terminaciones de línea nativas para la plataforma de tiempo de ejecución, es no utilizarlas \n
o no utilizarlas \r
. Debe utilizar System.getProperty("line.separator")
. Debe usar \n
y \r
donde desee LF y CR independientemente de la plataforma (por ejemplo, como se usa en HTTP, FTP y otros protocolos de comunicaciones de Internet).
Unix stty
En un shell de Unix, el stty
comando puede usarse para hacer que el shell se traduzca entre estas diversas convenciones. Por ejemplo stty -onlcr
, el shell traducirá posteriormente todos los LF salientes a CR LF.
Linux y OSX siguen las convenciones de Unix
Archivos de texto
Los archivos de texto siguen siendo enormemente importantes y ampliamente utilizados. Por ejemplo, HTML y XML son ejemplos de archivos de texto. La mayoría de los protocolos importantes de Internet, como HTTP, siguen convenciones de archivos de texto e incluyen especificaciones para finales de línea.
Impresoras
La mayoría de las impresoras que no sean las más baratas, aún respetan CR y LF. De hecho, son fundamentales para los lenguajes de descripción de páginas más utilizados: PCL y Postscript.
\r\n
está bien en Windows pero\n\r
no lo está, y lo recuerdo porque\r\n
es un acrónimo de enfermera registrada. También escuché que eso\n
es lo que la gente usa en Linux y\r
no se usa solo para el mismo propósito que\r\n
.\r
se usa en MacOS realmente antiguos. Sin embargo, no he verificado estos hechos.