Sí sí, soy consciente de que '\n'
escribe una nueva línea en UNIX, mientras que para Windows se encuentra la secuencia de dos caracteres: '\r\n'
. Todo esto es muy bueno en teoría, pero mi pregunta es ¿por qué ? ¿Por qué el carácter de retorno de carro es adicional en Windows? Si UNIX puede hacerlo, \n
¿ por qué se necesitan dos caracteres de Windows para hacer esto?
Estoy leyendo el libro de Python de David Beazley y él dice:
Por ejemplo, en Windows, escribir el carácter '\ n' en realidad genera la secuencia de dos caracteres '\ r \ n' (y al leer el archivo nuevamente, '\ r \ n' se traduce nuevamente en un solo '\ n' personaje).
¿Por qué el esfuerzo extra?
Voy a ser sincero. He sabido la diferencia por mucho tiempo pero nunca me he molestado en preguntar POR QUÉ. Espero que se responda hoy.
Gracias por tu tiempo.
fuente
\r\n
. También es utilizado por la mayoría de los protocolos de Internet basados en texto (por ejemplo, SMTP, HTTP, etc.) por la misma razón que Windows (es decir, el historial).System.out.printf()
oString.format()
) asegúrese de usarlo%n
como su CRLF para fines de compatibilidad con el sistema operativo.\n
es obsoleto.\n\r
varias veces. (Creo que fue algo de NetWare)Respuestas:
Compatibilidad con versiones anteriores.
Windows es retrocompatible con MS-DOS (agresivamente, incluso) y MS-DOS usó la convención CR-LF porque MS-DOS era compatible con CP / M-80 (algo por accidente) que usaba la convención CR-LF porque eso fue cómo manejaste una impresora (porque las impresoras eran originalmente máquinas de escribir controladas por computadora).
Las impresoras tienen un comando separado para mover el papel una línea hacia arriba a una nueva línea, y un comando separado para devolver el carro (donde estaba montado el papel) de regreso al margen izquierdo.
Es por eso. Y sí, es una molestia, pero es parte del paquete que permitió que MS-DOS ganara a CP / M, y Windows 95 ganara a todas las otras GUI sobre DOS, y Windows XP a hacerse cargo. de Windows 98.
(Nota: las impresoras láser modernas todavía tienen estos comandos porque también son compatibles con versiones anteriores de impresoras anteriores, HP en particular lo hace bien)
Para aquellos que no están familiarizados con las máquinas de escribir, aquí hay un video que muestra cómo se escribió: http://www.youtube.com/watch?v=LJvGiU_UyEQ . Observe que el papel primero se mueve hacia arriba y luego se devuelve el carro, incluso si ocurre en un movimiento simple. El ding notificó al mecanógrafo que el final estaba cerca y que se preparara para ello.
fuente
Hasta donde sé, esto se remonta a los días de las máquinas de escribir.
\r
es el retorno de carro, que es lo que se mueve donde está escribiendo en la página hacia la izquierda (o derecha si esa es su cultura)\n
es una nueva línea, que mueve su papel hacia arriba una línea.Hacer solo uno de estos en una máquina de escribir lo colocaría en el lugar equivocado para comenzar a escribir una nueva línea de texto.
Cuando surgieron las computadoras, supongo que algunas personas conservaron el modelo anterior, pero otras se dieron cuenta de que no era necesario y encapsularon una nueva línea completa como un solo personaje.
fuente
No sé si esto es de conocimiento común, pero debe tenerse en cuenta que los emuladores de terminal modernos todavía entienden la RC:
Es útil para indicadores de progreso, p. Ej.
fuente
Históricamente, el avance de línea significaba que la platina, el rodillo en el que escribía, giraba una línea, haciendo que el texto apareciera en la siguiente línea ... pero en la siguiente columna.
El retorno de carro significa "devolver el bit con el que escribe al principio de la línea".
Windows usa CR + LF porque MS-DOS lo hizo, porque CP / M lo hizo, porque tenía sentido para las líneas seriales.
Unix copió su \ n convención porque Multics lo hizo.
¡Sospecho que si profundizas lo suficiente, encontrarás un desacuerdo político entre los implementadores!
(Dejó de lado la parte extra de diversión, donde la convención Mac es (o solía ser) simplemente usar CR para separar líneas. ¡Y ahora Unicode también tiene su propio separador de línea, U + 2028!)
fuente
Historia del personaje de Newline (Wikipedia):
fuente
¿Qué pasa con la gente preguntando "por qué Unix puede hacer
\n
y no Windows"? Es una pregunta tan extraña.\n
y\r\n
muy bien. También salen\r\n
para que todos estén contentos. Un programa no se limita a "hacer", ya sea\n
o\r\n
- se acepta uno, el otro, o ambos, y salidas de uno, el otro o ambos.\n
lugar del correcto\r\n
.\n
sabiendo que hay algunos protocolos y programas que no les gustan?fuente
La razón por la cual las convenciones se mantienen en sus diversos sistemas (\ n en sistemas de tipo unix, \ r \ n en Windows, etc.) es que una vez que ha elegido una convención, NO PUEDE cambiarla sin romper un montón de archivos de personas. Y eso generalmente está mal visto.
Los sistemas de tipo Unix se desarrollaron (en los primeros días) utilizando varios modelos de teletipo, y en algún momento alguien decidió que el equipo debería devolver el carro cuando realizaba un avance de línea.
Windows vino de DOS, así que para Windows la pregunta realmente es: ¿Por qué DOS usó esta secuencia cr / lf? Supongo que tiene algo que ver con CP / M, donde DOS tiene algunas de sus raíces. Una vez más, los modelos específicos de teletipo pueden haber jugado un papel.
fuente
\n
, pero continúan usándolas\r\n
por ahora? Si lo hicieron a partir de Windows XP, ahora podrían comenzar a guardar archivos en\n
lugar de\r\n
.Aquí hay una respuesta de la mejor fuente: Microsoft. ¿Por qué el terminador de línea CR + LF?
fuente