line breaks - linea - ¿Diferencia entre los tipos de saltos de línea CR LF, LF y CR?
lf clrf (9)
Los sistemas basados en ASCII o un conjunto de caracteres compatibles usan LF (Avance de línea, 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 indica que una línea de papel debe salir de la impresora, y un retorno de carro indica que el carro de la impresora debe volver al principio de la línea actual.
Aquí están los wikipedia .
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)
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 las impresoras y los monitores de modo de texto. Estos caracteres se utilizan generalmente para marcar el final de las líneas en los archivos de texto. Diferentes sistemas operativos utilizan diferentes convenciones. Como señaló, Windows usa la combinación CR / LF, mientras que las Mac pre-OSX usan solo CR y así sucesivamente.
CR y LF son caracteres de control, codificados respectivamente 0x0D
(13 decimal) y 0x0A
(10 decimal).
Se utilizan para marcar un salto de línea en un archivo de texto. Como indicaste, Windows usa dos caracteres de la secuencia CR LF; Unix solo usa LF y el viejo MacOS (MacIntosh pre-OSX) usó CR.
Una perspectiva histórica apócrifa:
Según lo indicado por Peter , CR = Retorno de carro y LF = Avance de línea , dos expresiones tienen sus raíces en las antiguas máquinas de escribir / TTY. LF movió el papel hacia arriba (pero mantuvo la posición horizontal idéntica) y CR devolvió 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. A medida que pasaba el tiempo, la semántica física de los códigos no era aplicable, y como la memoria y el disquete 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 la muestran en consecuencia.
Como no hay respuesta que indique esto, resumimos brevemente:
Retorno de carro (MAC pre-OSX)
- CR
- / r
- Código ASCII 13
Avance de línea (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 simplemente el número 13 y 10 en una base / base diferente, generalmente base 8 (octal) o base 16 (hexadecimal).
El triste estado de los "separadores de registros" o "terminadores de línea" es un legado de las edades oscuras de la computación.
Ahora, damos por sentado que todo lo que queremos representar son datos estructurados de alguna manera y se ajustan a varias abstracciones que definen líneas, archivos, protocolos, mensajes, marcado, lo que sea.
Pero una vez esto no fue exactamente cierto. Aplicaciones incorporadas en caracteres de control y procesamiento específico del dispositivo. Los sistemas con muerte cerebral que requerían tanto CR como LF simplemente no tenían abstracción para separadores de registros o terminadores de línea. El CR era necesario para que el teletipo o la pantalla de video regresara 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 volcar los datos en bruto al dispositivo era demasiado compleja.
Unix y Mac en realidad especificaron una abstracción para el final de la línea, imagina eso. Lamentablemente, especificaron diferentes. (Unix, ejem, vino primero). Y naturalmente, utilizaron un código de control que ya estaba "cerca" de SOP
Dado que casi todo nuestro software operativo hoy en día es un descendiente de Unix, Mac o MS que operan SW, estamos atascados con la línea que termina en la confusión.
Este es un buen resumen que encontré:
El carácter de retorno de carro (CR) ( 0x0D
, /r
) mueve el cursor al principio de la línea sin avanzar a la línea siguiente. Este carácter se utiliza como un nuevo carácter de línea en los sistemas operativos Commodore y Early Macintosh (OS-9 y anteriores).
El carácter de avance de línea (LF) ( 0x0A
, /n
) mueve el cursor hacia abajo a la línea siguiente sin regresar al principio de la línea. Este carácter se utiliza 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 hacia abajo hasta la siguiente línea y al principio de esa línea. Este carácter se usa como un nuevo carácter de línea en la mayoría de los otros sistemas operativos que no son Unix, incluidos Microsoft Windows, Symbian OS y otros.
Jeff Atwood tiene una publicación de blog reciente sobre esto: 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, típicamente un ASR33, como un dispositivo de consola, porque esta secuencia era necesaria para colocar esas impresoras al inicio de una nueva línea. En estos sistemas, el texto se compuso a menudo para ser compatible con estas impresoras, ya que el concepto de controladores de dispositivo que ocultan dichos detalles de hardware a la aplicación aún 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 ocultó el hecho de que el cabezal de impresión no podía regresar desde el extremo derecho hasta el comienzo de la siguiente línea en un solo carácter. Es por eso que la secuencia siempre fue enviada con el CR primero. De hecho, a menudo era necesario enviar caracteres adicionales (CR extraños o NUL, que se ignoran) para darle tiempo al cabezal de impresión de moverse al margen izquierdo. Incluso después de reemplazar los teletipos por terminales de computadora con velocidades de transmisión más altas, muchos sistemas operativos aún soportaban el envío automático de estos caracteres de relleno, para la compatibilidad con terminales más baratos que requerían múltiples tiempos de caracteres para desplazarse por la pantalla.
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 datos de mainframes a rango medio. Coloquialmente (como solo la gente arcana usa ebcdic) NL ha sido igualada con CR o LF o CRLF
Se trata realmente de qué bytes se almacenan en un archivo. CR
es un código de byte 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 fin de línea.
Mucho más información, como siempre, en wikipedia .