2009-10-12 29 views
398

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).¿Diferencia entre los tipos de salto de línea CR LF, LF y CR?

+6

Muy similar, pero no es un _exact_ duplicado. '\ n' se representa típicamente por un salto de línea, pero no es necesariamente un salto de línea. –

+62

CR y LF son caracteres de control ASCII y Unicode, mientras que '\ r' y' \ n' son abstracciones utilizadas en ciertos lenguajes de programación. El cierre de esta pregunta pasa por alto las diferencias fundamentales entre las preguntas y perpetúa la desinformación. –

+4

@AdrianMcCarthy Es un problema con la forma en que los votos cercanos actúan como respuestas de una manera; una respuesta que afirmaba que los dos eran lo mismo se podía rechazar y luego se atenuaba como muy, muy mal, pero solo se necesitan 4 votos de acuerdo (comparables a los votos por arriba) para que ocurra un cierre muy incorrecto, sin forma de contrarrestar el voto hasta después Está pasando. –

Respuesta

190

Realmente se trata 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 de forma similar, para el avance de línea. Simplemente se refiere a los bytes que se colocan como marcadores de final de línea.

Forma más información, como siempre, en wikipedia.

440

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 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 se indica por Pedro, CR = retorno de carro y LF = Alimentación 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 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 del convenio de fin de línea del archivo y lo muestran en consecuencia.

+25

, básicamente, cada editor de texto lo hará, excepto el bloc de notas;) – Wyatt8740

+7

Es un poco engañoso decir que MacIntosh [sic] usa CR como no lo ha hecho desde OS X. De http://superuser.com/questions/439440/did-mac- os-lion-switch-to-using-line-feeds-lf-n-for-line-breaks-instead-of "Mac OS X, como POSIX-compatible Unix utiliza el típico Unix LF" –

+1

@NickEdwards Excelente punto. Supongo que estoy mostrando mi edad ;-) Los Mac basados ​​en OSX usan LF, como buenos hosts Unix. – mjv

7

Los sistemas basados ​​en ASCII o un conjunto utilización carácter compatible ni LF (salto de línea, 0x0A, 10 en decimal) o CR (retorno de carro, 0x0D, 13 en decimal) de forma individual, o CR seguidos por LF (CR + LF, 0x0D 0x0A); Estos caracteres se basan en comandos de impresora: El salto de línea indicó que una línea de papel debería salir de la impresora, y un retorno de carro indicó que el carro de impresora debería volver al comienzo de la línea actual.

Aquí está el details.

240

Este es un buen resumen que encontré:

El carácter de retorno de carro (CR) (0x0D, \ r) se mueve el cursor al principio 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 de alimentación de línea (LF) (0x0A, \ n) mueve el cursor hacia abajo a la siguiente línea sin volver al comienzo 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 personajes 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.

Source

+17

¿Por qué no se acepta esta respuesta? – Ashwin

+113

CR = \ r; LF = \ n; CRLF = \ r \ n - ¡eso es lo que quería! –

+1

El carácter "ficha vertical" mueve el cursor hacia abajo y mantiene la posición en la línea, no el carácter LF. El LF es EOL. – 12431234123412341234123

17

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. 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.

5

El triste estado de "separadores de registros" o "terminadores de línea" es un legado de la era oscura 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, marcado, lo que sea.

Pero alguna vez esto no era exactamente así. 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 la línea, imagínenlo. Tristemente, especificaron diferentes. (Unix, ejem, fue lo primero). Y, naturalmente, usaron un código de control que ya estaba "cerca" de S.O.P.

Dado que casi todo nuestro software operativo en la actualidad es descendiente de Unix, Mac o MS que operan SW, nos encontramos con la línea que termina con la confusión.

32

Jeff Atwood tiene un reciente post sobre esto: The Great Newline Schism

Aquí es la esencia de Wikipedia:

La secuencia CR + LF era de uso común en muchos sistemas informáticos tempranos que tenían adoptó máquinas de teletipo, típicamente un ASR33, como dispositivo de consola , porque esta secuencia era requerida para colocar esas impresoras en al comienzo de una nueva línea. En estos sistemas , texto era a menudo de forma rutinaria compuesta para ser compatible con estas impresoras , ya que el concepto de dispositivo conductores que ocultan esos detalles de hardware de la aplicación aún no estaba bien desarrollado ; las aplicaciones tenían que hablar directamente a 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 pudo volver desde la extrema derecha al principio de la siguiente línea en tiempo de un 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 o NULs extraños, que se ignoran) a darle al cabezal de impresión tiempo para pasar a el margen izquierdo. Incluso después de teletipos fueron reemplazados por terminales de ordenador con velocidades de transmisión más altas, muchos sistemas operativos siguen soportando automática envío de estos caracteres de relleno, por compatibilidad con terminales más baratos que requerían varias veces de carácter para desplazarse por la pantalla.

+4

+1 Es por este simple entendimiento que siempre recuerdo en qué orden viene la combinación. Incluso hoy todavía podemos ver esta lógica mecánica en cualquier impresora de inyección de tinta (me encanta entender porque odio aprender). Mis otros trucos de memoria son: "Mac? Return to sender" y "NewLineFeed" (para recordar que NL === LF y para recordar el \ n, ya que CR ya tiene la R en su abreviatura) – GitaarLAB

+0

Tengo dudas sobre la afirmación de que dividir el proceso de ir a la siguiente línea en dos códigos de control era necesaria para el tiempo. No dudo que haya problemas de sincronización, pero la comunicación serial siempre tuvo algo de buffering y control de flujo. En términos del hardware del controlador real, entonces, aún así, podría imaginarse que hubo algunos problemas de tiempo para superar que podrían haberse resuelto con el equivalente de agregar NULs para llenar el tiempo de devolver el cabezal de impresión al margen, pero hubiera Me gusta ver mejores citas antes de creer que esa es la razón por la que CR y LF fueron operaciones distintas. –

+3

"Estoy dudoso ... dos códigos de control eran necesarios para el tiempo". Eso no es lo que dice. Dice que los CR y NUL adicionales están aquí para dar tiempo a que vuelva, no el CR LF original. –

89

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

retorno de carro (MAC pre-OSX)

  • CR
  • \ r
  • código ASCII 13

Alimentación de línea (Linux, Mac OS X)

  • LF
  • \ n
  • código ASCII 10

retorno de carro y línea de alimentación (Windows)

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

Si ve el código ASCII en un formato extraño, no son más que el número 13 y 10 en una base/base diferente, por lo general de base 8 (octal) o base 16 (hexadecimal).

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

0

NL derivado de EBCDIC NL = X'15' que lógicamente comparar a CRLF ASCII x'odoa ... Esto se hace evidente cuando se mueve physcally datos de unidades centrales de gama media. Coloquialmente (como solo la gente arcana usa ebcdic) NL se ha equiparado con CR o LF o CRLF

Cuestiones relacionadas