¿Diferencia entre \n y \r?
¿Cuál es la diferencia entre \n
(nueva línea) y\r
(retorno de carro)?
En particular, ¿existen diferencias prácticas entre \n
y \r
? ¿Hay lugares donde debería usarse uno en lugar del otro?
En términos de código ascii, es 3, ya que son 10 y 13 respectivamente;-).
Pero en serio, hay muchos:
- en Unix y en todos los sistemas similares a Unix,
\n
es el código de fin de línea,\r
no significa nada especial - como consecuencia, en C y en la mayoría de los lenguajes que de alguna manera lo copian (incluso de forma remota),
\n
es la secuencia de escape estándar para el final de línea (traducida hacia/desde secuencias específicas del sistema operativo según sea necesario) - en sistemas Mac antiguos (anteriores a OS X),
\r
el código era el de fin de línea - en Windows (y muchos sistemas operativos antiguos), el código para el final de línea es de 2 caracteres,
\r\n
en este orden - Como consecuencia (sorprendente ;-) (que se remonta a sistemas operativos mucho más antiguos que Windows),
\r\n
está la terminación de línea estándar para los formatos de texto en Internet. - para "terminales" electromecánicos tipo teletipo",
\r
ordena al carro que retroceda hacia la izquierda hasta que llegue al tope más a la izquierda (una operación lenta),\n
ordena al rodillo que enrolle una línea (una operación mucho más rápida); esa es la razón por la que siempre tienes\r
antes\n
, para que el rodillo pueda moverse mientras el carro sigue yendo hacia la izquierda!-) Wikipedia tiene una explicación más detallada . - para terminales en modo de caracteres (normalmente emulando terminales de impresión aún más antiguos como el anterior), en modo sin formato,
\r
y\n
actúa de manera similar (excepto en términos del cursor, ya que no hay carro ni rodillo ;-)
En la práctica, en el contexto moderno de escribir en un archivo de texto, siempre debes usar \n
(el tiempo de ejecución subyacente lo traducirá si estás en un sistema operativo extraño, por ejemplo, Windows;-). La única razón para usarlo \r
es si está escribiendo en una terminal de caracteres (o más probablemente en una "ventana de consola" que la emula) y desea que la siguiente línea que escriba sobrescriba la última que acaba de escribir (a veces se usa para animaciones tontas "ascii"). "efectos de, por ejemplo, barras de progreso); sin embargo, esto se está volviendo bastante obsoleto en un mundo de GUI;-).
Históricamente \n
, se usaba a para mover el carro hacia abajo, mientras que se \r
usaba para mover el carro hacia el lado izquierdo de la página.
Dos personajes diferentes.
\n
se utiliza como terminador de final de línea en archivos de texto Unix
\r
Históricamente (antes de OS X) se usaba como terminador de final de línea en archivos de texto de Mac.
\r\n
(es decir, ambos juntos) se utilizan para terminar líneas en archivos de texto de Windows y DOS.
Como nadie más lo mencionó específicamente (¿son demasiado jóvenes para saberlo/recordarlo?), sospecho que el uso de \r\n
se originó en máquinas de escribir y dispositivos similares.
Cuando querías una nueva línea mientras usabas una máquina de escribir con capacidad para varias líneas, tenías que realizar dos acciones físicas: deslizar el carro hacia el principio (izquierda, en EE. UU.) de la página y hacer avanzar el papel una muesca. .
En los días de las impresoras de líneas, la única forma de poner texto en negrita, por ejemplo, era hacer un retorno de carro SIN una nueva línea e imprimir los mismos caracteres sobre los antiguos, agregando así más tinta y haciéndolo aparecer más oscuro (en negrita). . Cuando la función mecánica de "nueva línea" fallaba en una máquina de escribir, este era el resultado molesto: podías escribir sobre la línea anterior de texto si no estabas prestando atención.
Dos personajes diferentes para diferentes sistemas operativos. También esto juega un papel en los datos transmitidos TCP/IP
que requieren el uso de\r\n
.
\n
Unix
\r
Mac
\r\n
Windows y DOS.