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).
fuente
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 código de bytes para el retorno de carro (desde los días de las máquinas de escribir) y LF
, de 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 .
CR
es el personaje de escape \r
y LF
es el personaje de escape \n
. Además, Wikipedia: Newline .
CR and LF
es solo el final de la línea y la nueva línea de acuerdo con este enlace , ¿es esto correcto?
CR y LF son caracteres de control, respectivamente codificados 0x0D
(13 decimales) y 0x0A
(10 decimales).
Se utilizan para marcar un salto de línea en un archivo de texto. Como indicó, Windows usa dos caracteres de la secuencia CR LF; Unix solo usa LF y el viejo MacOS (pre-OSX MacIntosh) usaba CR.
Una perspectiva histórica apócrifa:
Como lo indicó Peter , CR = retorno de carro y LF = avance de línea , dos expresiones tienen sus raíces en las viejas máquinas de escribir / TTY. LF movió el papel hacia arriba (pero mantuvo la posición horizontal idéntica) y CR recuperó 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 espacio en el disquete eran muy importantes, algunos diseñadores de sistemas operativos decidieron usar solo uno de los caracteres, simplemente no se comunicaban muy bien entre ellos; -)
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 mostrarlo en consecuencia.
CR and LF
es solo el final de la línea y la nueva línea de acuerdo con este enlace , ¿es esto correcto?
CR+LF
) pueden mostrarse con líneas nuevas dobles en otros sistemas. Presumiblemente, el editor que muestra el texto admite el retorno de carro y el avance de línea como delimitadores de nueva línea y, como tal, puede crear 2 líneas donde se pretendía 1. Entonces, aunque CR+LF
podría ser el más compatible, no creo que sea sin problemas.
Este es un buen resumen que encontré:
El carácter de 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 utiliza como un nuevo carácter de línea en los sistemas operativos Commodore y Early Macintosh (OS-9 y versiones anteriores).
El carácter de avance de línea (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 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 a la siguiente línea y al comienzo de esa línea. Este carácter se utiliza como un nuevo carácter de línea en la mayoría de los sistemas operativos que no son Unix, incluidos Microsoft Windows, Symbian OS y otros.
Como no hay una respuesta que indique esto, resumido sucintamente:
Retorno de carro (MAC pre-OSX)
Alimentación de línea (Linux, MAC OSX)
Retorno de carro y avance de línea (Windows)
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).
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 dispositivo de consola, porque esta secuencia era necesaria para colocar esas impresoras al comienzo de una nueva línea. En estos sistemas, el texto a menudo se componía habitualmente para ser compatible con estas impresoras, ya que el concepto de controladores de dispositivo que ocultaban dichos detalles de hardware de 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 ocultaba el hecho de que el cabezal de impresión no podía regresar desde el extremo derecho al comienzo de la siguiente línea en el tiempo de un carácter. Es por eso que la secuencia siempre se envió primero con el CR. De hecho, a menudo era necesario enviar caracteres adicionales (CR o NUL extraños, que se ignoran) para dar tiempo al cabezal de impresión para moverse al margen izquierdo. Incluso después de que los teletipos fueron reemplazados por terminales de computadora con velocidades de transmisión más altas, muchos sistemas operativos aún admitían el envío automático de estos caracteres de relleno, por compatibilidad con terminales más baratos que requerían tiempos de caracteres múltiples para desplazar la pantalla.
<CR><CR><LF>
, así que, por supuesto, experimenté con solo una <CR>
. Envié <CR><LF>A
después de una larga fila, y se podía escuchar la A
impresión antes de que el carro regresara por completo.
<CR><CR>
y escribiendo el número correcto de espacios, luego reimprimiendo la misma palabra: una forma primitiva de negrita.
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 controlabas las impresoras y los monitores en modo texto. Estos caracteres generalmente se usan 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 Macs anteriores a OSX usan solo CR, etc.
Los sistemas basados en ASCII o un juego de caracteres compatible 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 regresar al comienzo de la línea actual.
Aquí están los detalles .
El triste estado de los "separadores de registros" o "terminadores de línea" es un legado de las edades oscuras de la informática.
Ahora, damos por sentado 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 había una vez que esto no era exactamente cierto. Aplicaciones de caracteres de control integrados 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 volvieran a la columna uno y el LF (hoy, NL, el 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 en el dispositivo era demasiado compleja.
Unix y Mac en realidad especificaron una abstracción para el final de línea, imagínense 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 SW operativo de Unix, Mac o MS, estamos atrapados con la línea que termina con la confusión.
NL derivado de EBCDIC NL = x'15 'que lógicamente se compararía con CRLF x'odoa ascii ... esto se hace evidente cuando se mueven físicamente datos de mainframes a rango medio. Coloquialmente (como solo las personas arcanas usan ebcdic) NL se ha equiparado con CR o LF o CRLF
\n
normalmente está representado por un salto de línea, pero no es necesariamente un salto de línea.\r
y\n
son abstracciones utilizadas en ciertos lenguajes de programación. Cerrar esta pregunta pasa por alto las diferencias fundamentales entre las preguntas y perpetúa la desinformación.\n
no significa lo mismo en todos los lenguajes de programación.