¿Diferencia entre los tipos de salto de línea CR LF, LF y CR?

Me gustaría saber la diferencia (con ejemplos si es posible) entre los tipos de salto de línea CR LF (Windows), LF (Unix) y CR (Macintosh).

Realmente se trata de qué bytes se almacenan en un archivo. CR es un bytecode para el retorno de carro (desde los días de las máquinas de escribir) y LF manera similar, para el avance de línea. Simplemente se refiere a los bytes que se colocan como marcadores de final de línea.

Más información, como siempre, en wikipedia .

CR y LF son caracteres de control, codificados respectivamente 0x0D (13 decimal) y 0x0A (10 decimal).

Se usan para marcar un salto de línea en un archivo de texto. Como indicó, Windows usa dos caracteres la secuencia CR LF; Unix solo usa LF y el viejo MacOS (pre-OSX MacIntosh) usó CR.

Una perspectiva histórica apócrifa:

Como lo indica Peter , CR = Retorno de carro y LF = Avance de línea , dos expresiones tienen sus raíces en las máquinas de escribir antiguas / TTY. LF movió el papel hacia arriba (pero mantuvo la posición horizontal idéntica) y CR trajo de vuelta el “carro” para que el siguiente carácter escrito estuviera en la posición más a la izquierda del papel (pero en la misma línea). CR + LF estaba haciendo ambas cosas, es decir, preparándose para escribir una nueva línea. Con el paso del tiempo, la semántica física de los códigos no era aplicable, y como la memoria y el espacio de los disquetes eran escasos, algunos diseñadores de sistemas operativos decidieron usar solo uno de los caracteres, simplemente no se comunicaban muy bien entre sí; -)

La mayoría de los editores de texto modernos y las aplicaciones orientadas a texto ofrecen opciones / configuraciones, etc. que permiten la detección automática de la convención de fin de línea del archivo y mostrarla en consecuencia.

Este es un buen resumen que encontré:

El carácter Retorno de carro (CR) ( 0x0D , \r ) mueve el cursor al comienzo de la línea sin avanzar a la siguiente línea. Este carácter se usa como un nuevo carácter de línea en los sistemas operativos Commodore y Early Macintosh (OS-9 y anteriores).

El carácter Line Feed (LF) ( 0x0A , \n ) mueve el cursor hacia abajo a la siguiente línea sin volver al principio de la línea. Este carácter se usa como un nuevo carácter de línea en sistemas basados ​​en UNIX (Linux, Mac OSX, etc.)

La secuencia de fin de línea (EOL) ( 0x0D 0x0A , \r\n ) es en realidad dos caracteres ASCII, una combinación de los caracteres CR y LF. Mueve el cursor tanto hacia la siguiente línea como hacia el comienzo de esa línea. Este carácter se usa como un nuevo carácter de línea en la mayoría de los demás sistemas operativos que no son Unix, incluidos Microsoft Windows, Symbian OS y otros.

Fuente

Dado que no hay una respuesta que diga esto, se resume sucintamente:

Retorno de carro (MAC pre-OSX)

  • CR
  • \ r
  • Código ASCII 13

Line Feed (Linux, MAC OSX)

  • LF
  • \norte
  • Código ASCII 10

Retorno de carro y avance de línea (Windows)

  • CRLF
  • \ r \ n
  • Código ASCII 13 y luego código ASCII 10

Si ve el código ASCII en un formato extraño, son meramente el número 13 y 10 en una raíz / base diferente, generalmente base 8 (octal) o base 16 (hexadecimal).

http://www.bluesock.org/~willg/dev/ascii.html

Jeff Atwood tiene una publicación reciente sobre este tema: The Great Newline Schism

Aquí está la esencia de Wikipedia :

La secuencia CR + LF era de uso común en muchos sistemas informáticos tempranos que habían adoptado máquinas de teletipo, normalmente un ASR33, como dispositivo de consola, porque esta secuencia era necesaria para ubicar esas impresoras al comienzo de una nueva línea. En estos sistemas, el texto a menudo se componía rutinariamente para ser compatible con estas impresoras, ya que el concepto de controladores de dispositivos que ocultaban los detalles de hardware de la aplicación todavía no estaba bien desarrollado; las aplicaciones tenían que hablar directamente con la máquina de teletipo y seguir sus convenciones. La separación de las dos funciones ocultaba el hecho de que el cabezal de impresión no podía volver desde la extrema derecha hasta el comienzo de la siguiente línea en un solo carácter. Es por eso que la secuencia siempre se envió con el CR primero. De hecho, a menudo era necesario enviar caracteres adicionales (CR extraños o NUL, que se ignoran) para dar tiempo al cabezal de impresión para moverse al margen izquierdo. Incluso después de que los teletipos fueran reemplazados por terminales de computadora con velocidades de transmisión en baudios más altas, muchos sistemas operativos todavía soportaban el envío automático de estos caracteres de relleno, para compatibilidad con terminales más baratos que requerían múltiples caracteres para desplazarse por la pantalla.

CR – código ASCII 13

LF – código ASCII 10.

Teóricamente CR devuelve el cursor a la primera posición (a la izquierda). LF alimenta una línea moviendo el cursor una línea hacia abajo. Así es como en los viejos tiempos controlaba impresoras y monitores de modo de texto. Estos caracteres generalmente se utilizan para marcar el final de las líneas en los archivos de texto. Los diferentes sistemas operativos utilizan diferentes convenciones. Como señaló, Windows usa la combinación CR / LF mientras que los Mac pre-OSX usan solo CR, etc.

Los sistemas basados ​​en ASCII o un juego de caracteres compatible utilizan LF (Line feed, 0x0A, 10 en decimal) o CR (Retorno de carro, 0x0D, 13 en decimal) individualmente o CR seguido de LF (CR + LF, 0x0D 0x0A); Estos caracteres se basan en los comandos de la impresora: el avance de línea indicaba que una línea de papel salía de la impresora, y un retorno de carro indicaba que el carro de la impresora debería volver al comienzo de la línea actual.

Aquí están los detalles .

El triste estado de “separadores de registros” o “terminadores de línea” es un legado de las épocas oscuras de la informática.

Ahora, damos por hecho que todo lo que queremos representar es de alguna manera datos estructurados y se ajusta a varias abstracciones que definen líneas, archivos, protocolos, mensajes, marcas, lo que sea.

Pero alguna vez esto no era exactamente cierto. Caracteres incorporados de control de aplicaciones y procesamiento específico del dispositivo. Los sistemas con muerte cerebral que requerían CR y LF simplemente no tenían abstracción para los separadores de registros o los terminadores de línea. El CR era necesario para que el teletipo o la pantalla de video regresaran a la columna uno y el LF (hoy, NL, mismo código) era necesario para avanzar a la siguiente línea. Supongo que la idea de hacer algo más que descargar los datos sin procesar al dispositivo era demasiado compleja.

Unix y Mac realmente especificaron una abstracción para el final de línea, imagínense eso. Tristemente, especificaron diferentes. (Unix, ejem, primero). Y, naturalmente, utilizaron un código de control que ya estaba “cerca” de SOP

Como casi todo nuestro software operativo de hoy en día es descendiente de Unix, Mac o MS que opera SW, estamos atrapados con la línea que termina con la confusión.

NL derivado de EBCDIC NL = x’15 ‘que se compararía lógicamente con CRLF x’odoa ascii … esto se hace evidente cuando se mueven físicamente los datos de los mainframes a los medios. Coloquialmente (como solo la gente arcana usa ebcdic) NL se ha equiparado con CR o LF o CRLF