¿Diferencia entre \n y \r?

Resuelto eozzy asked hace 15 años • 12 respuestas

¿Cuál es la diferencia entre \n(nueva línea) y\r (retorno de carro)?

En particular, ¿existen diferencias prácticas entre \ny \r? ¿Hay lugares donde debería usarse uno en lugar del otro?

eozzy avatar Nov 19 '09 12:11 eozzy
Aceptado

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, \nes el código de fin de línea, \rno 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), \nes 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), \rel 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\nen este orden
  • Como consecuencia (sorprendente ;-) (que se remonta a sistemas operativos mucho más antiguos que Windows), \r\nestá la terminación de línea estándar para los formatos de texto en Internet.
  • para "terminales" electromecánicos tipo teletipo", \rordena al carro que retroceda hacia la izquierda hasta que llegue al tope más a la izquierda (una operación lenta), \nordena 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, \ry \nactú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 \res 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;-).

Alex Martelli avatar Nov 19 '2009 05:11 Alex Martelli

Históricamente \n, se usaba a para mover el carro hacia abajo, mientras que se \rusaba para mover el carro hacia el lado izquierdo de la página.

tster avatar Nov 19 '2009 05:11 tster

Dos personajes diferentes.

\nse utiliza como terminador de final de línea en archivos de texto Unix

\rHistó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.

pavium avatar Nov 19 '2009 05:11 pavium

Como nadie más lo mencionó específicamente (¿son demasiado jóvenes para saberlo/recordarlo?), sospecho que el uso de \r\nse 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.

nothingisnecessary avatar Jan 20 '2016 20:01 nothingisnecessary

Dos personajes diferentes para diferentes sistemas operativos. También esto juega un papel en los datos transmitidos TCP/IPque requieren el uso de\r\n .

\nUnix

\rMac

\r\nWindows y DOS.

a432511 avatar Nov 19 '2009 05:11 a432511