Si hace esto, asegúrese de abrir sus archivos en modo binario . De lo contrario, las secuencias de archivos C / C ++ estándar convertirán el "\ n" (para archivos de texto (el valor predeterminado)) en una secuencia de final de línea (ELS) específica de la plataforma. Por lo tanto, "\ r \ n" en Windows se convertirá en "\ r \ r \ n" en el disco físico. Nota: si solo usa C / C ++ para leer el archivo, no notará que el ELS se convertirá nuevamente a "\ n" cuando se lea desde el archivo.
Martin York
@ Martin: estoy en .net y estoy usando (para este ejemplo) File.AppendAllText, con "\ r \ n", y acabo de echar un vistazo a un archivo, y no hay duplicación \ r al final de la línea. ¿Magia?
Daniel Mošmondor
@Daniel: Debería haber sido más específico. Las secuencias C / C ++ . Cuando se asocia con un archivo y se abre en modo texto . También depende de cómo veas el archivo (usa un editor hexadecimal).
Martin York
@ Martin - usó PSPad en modo hexadecimal ...
Daniel Mošmondor
1
En teclados antiguos, la tecla Intro se llamaba tecla de retorno. Entonces, el retorno vino primero, luego se generó el salto de línea en respuesta. Todo es tan obvio cuando tienes demasiada historia.
Mark Ransom
Respuestas:
1084
Usaría la palabra ' r etur n ' para recordar, la r viene antes que la n.
Y para recordar que la palabra a usar es retorno , recuerde que \ r es el retorno de carro . ¡No recuerde que "Retorno" es el nombre de la tecla en los teclados de Mac, o de lo contrario podría mirar el teclado de una PC, ver la tecla llamada "Enter" y obtener el orden de letras incorrecto!
Rob Kennedy
3
@David Pero me preguntaba si ese efecto \n\ry \r\nes el mismo, ¿no tienen el mismo efecto? ¿Puede usted decir la diferencia?
Mr.Anubis
77
@ Mr.Anubis si tiene cierta impresora matricial, no debería haber ninguna diferencia, ya que el orden de los comandos no debería ser importante. Sin embargo, en algunas impresoras, obtendrá una línea vacía adicional o ningún avance de línea. Y todo lo dicho anteriormente se aplica a los editores de texto: estarán confundidos, las clases TextStream se enfermarán, etc. El orden es importante. :)
Daniel Mošmondor
12
@ DanielMošmondor Alternativamente, puede recordar que el orden es importante. O que cuando preguntaste en SO alguien te dio un RemiNder, que luego olvidaste. O que no puedes usar tu apellido como recordatorio, porque el orden de r y n está invertido :)
Daniel Daranas
55
@RobKennedy jaja sabes que vine aquí y leí sobre el regreso, y pensé "¡genial!". Entonces leí tu comentario. Ahora, cada vez que no recuerdo qué tecla no debería mirar, miro mi tecla "Enter" y pienso que "algo está muy mal aquí" ... ¡jaja por pensarlo!
Wayne Uroda
53
Si está usando C #, debe usarlo Environment.NewLine, que en consecuencia para MSDN es:
Una cadena que contiene "\ r \ n" para plataformas que no son Unix, o una cadena que contiene "\ n" para plataformas Unix.
En realidad, este tipo de depende de lo que estás haciendo. Si solo está enviando texto sin formato a la consola o en un archivo para uso local, Environment.NewLineestá bien. Sin embargo, si está escribiendo cosas en un formato bien definido, el formato también puede definir la nueva línea. Por ejemplo, el protocolo HTTP establece que debe usarlo \r\ncomo terminador de línea para encabezados, etc., independientemente de la plataforma.
Matti Virkkunen
3
Sí, este es realmente un mal consejo.
IvanP
Es por eso que necesita escapar de sus mensajes web y construir pruebas unitarias para verificar el envío de \ r \ n (windows), \ r (mac), \ n (linux) se envía correctamente como \ r \ n al servidor web.
TamusJRoyce
37
La nueva línea depende de su sistema operativo:
DOS &Windows: \r\n 0D0A(hex),13,10(decimal)Unix&Mac OS X: \n,0A,10Macintosh(OS 9): \r,0D,13
Por extraño que parezca, soy una de estas personas que se sabe 0D0Ade memoria, pero aún confunde el \ry \n.
Nyerguds
1
O, recuerdo que \ r es el retorno de carro y \ n es el avance de línea ... es solo que no recuerdo su orden, por lo que no ayuda a recordar cuál es 0D y cuál es 0A;)
Nyerguds
20
La secuencia es CR (retorno de carro) - LF (avance de línea). ¿Recuerdas las impresoras matriciales? Exactamente. Entonces, el orden correcto es \ r \ n
No estoy de acuerdo, @David. Simplemente pensar en impresoras matriciales (o máquinas de escribir, ya que son las que tienen que devolver un carro) no es suficiente. Con solo información básica sobre cómo funcionan, no hay razón para pensar que importa si adelantamos el trabajo antes o después de regresar al inicio de la línea. Tanto \ r \ n como \ n \ r ponen el papel en la misma posición.
Rob Kennedy
@ikegami en la mayoría de las impresoras, no en todas. También tenían interruptores DIP para configurar ese comportamiento. :)
Daniel Mošmondor
55
Una razón para colocar el avance de línea después del retorno del carro es que reduce la cantidad total de tiempo requerido: mientras el cabezal vuelve al borde izquierdo del papel, la platina puede indexar una línea. La operación más larga comienza primero, por lo que toda la operación se completa en el tiempo que lleva ejecutar la operación más larga. Hicimos muchas cosas por razones como esa en ese entonces; imagina esperar un par de cientos de líneas a 110 baudios ...
Jerry Andrews
8
En cualquier idioma .NET, Environment.NewLinesería preferible.
No funciona para cadenas constantes. Cuando sea necesario, es mejor no usar constante y usar una cadena estática en su lugar;)
TamusJRoyce
5
Tenga cuidado al hacer esto manualmente.
De hecho, aconsejaría no hacer esto en absoluto.
En realidad, estamos hablando de la secuencia de terminación de línea LTS que es específica de la plataforma.
Si abre un archivo en modo de texto (es decir, no binario), las secuencias convertirán el "\ n" en el LTS correcto para su plataforma. Luego convierta el LTS nuevamente a "\ n" cuando lea el archivo.
Como resultado, si imprime "\ r \ n" en un archivo de Windows, obtendrá la secuencia "\ r \ r \ n" en el archivo físico (eche un vistazo con un editor hexadecimal).
Por supuesto, esto es un verdadero dolor cuando se trata de transferir archivos entre plataformas.
Ahora, si está escribiendo en una secuencia de red, lo haría manualmente (como la mayoría de los protocolos de red lo llaman específicamente). Pero me aseguraría de que la transmisión no esté interpretando nada (por lo que el modo binario era apropiado).
Un single también \nfunciona bien en Windows, incluida la última versión de Notepad.
André Caron
Creo que los editores modernos detectarán los finales de línea, ya que diferentes sistemas operativos usan diferentes finales.
David Snabel-Caunt
1
En realidad no: si imprime esto en un archivo (archivo estándar C / C ++ abierto en modo texto) en Windows, el archivo físico contendrá "\ r \ r \ n" (verifíquelo con un editor hexadecimal). Cuando lo lees de nuevo, "\ r \ n" se convierte de nuevo en un solo "\ n".
Martin York
2
En realidad, @DavidCaunt, acabo de intentar \ n y no funciona con el bloc de notas en Win8.
philk
4
De Wikipedia (puede leer cuál es el correcto para su sistema operativo en ese artículo):
Los sistemas basados en ASCII o un conjunto de caracteres compatible usan LF (avance de línea, '\ n', 0x0A, 10 en decimal) o CR (retorno de carro, '\ r', 0x0D, 13 en decimal) individualmente, o CR seguido de LF (CR + LF, '\ r \ n', 0x0D0A).
Es extraño decir que lo recuerdo porque es lo contrario de la máquina de escribir que utilicé.
Bueno, si era normal no tenía necesidad de recordarlo ...:-)
* Imagen de Wikipedia
En la máquina de escribir, cuando termina de digitar la línea, utiliza la palanca de retorno del carro , que antes hace rodar el tambor, la nueva línea y luego le permite operar manualmente el retorno del carro .
Puede escuchar de este disco de freesound.org el sonido de la alimentación de papel al principio, y alrededor de -1: 03 segundos desde el final, después de la advertencia de campana para el final del sonido de línea del tambor que rueda y después el del retorno de carro.
si está usando C #, ¿por qué no usarlo Environment.NewLine? (Supongo que usa algunos objetos de escritor de archivos ... simplemente páselo Environment.NewLiney manejará los terminadores correctos.
Respuestas:
Usaría la palabra ' r etur n ' para recordar, la r viene antes que la n.
fuente
\n\r
y\r\n
es el mismo, ¿no tienen el mismo efecto? ¿Puede usted decir la diferencia?Si está usando C #, debe usarlo
Environment.NewLine
, que en consecuencia para MSDN es:fuente
Environment.NewLine
está bien. Sin embargo, si está escribiendo cosas en un formato bien definido, el formato también puede definir la nueva línea. Por ejemplo, el protocolo HTTP establece que debe usarlo\r\n
como terminador de línea para encabezados, etc., independientemente de la plataforma.La nueva línea depende de su sistema operativo:
Más detalles aquí: https://ccrma.stanford.edu/~craig/utility/flip/
En caso de duda, use cualquier visor / editor hexadecimal gratuito para ver cómo un archivo codifica su nueva línea.
Para mí, yo uso siguiente guía para ayuda a recordar: 0D0A = \ r \ n = CR, LF = ca rr iage r eturn, li n correo de alimentación
fuente
0D0A
de memoria, pero aún confunde el\r
y\n
.La secuencia es CR (retorno de carro) - LF (avance de línea). ¿Recuerdas las impresoras matriciales? Exactamente. Entonces, el orden correcto es \ r \ n
fuente
En cualquier idioma .NET,
Environment.NewLine
sería preferible.fuente
Tenga cuidado al hacer esto manualmente.
De hecho, aconsejaría no hacer esto en absoluto.
En realidad, estamos hablando de la secuencia de terminación de línea LTS que es específica de la plataforma.
Si abre un archivo en modo de texto (es decir, no binario), las secuencias convertirán el "\ n" en el LTS correcto para su plataforma. Luego convierta el LTS nuevamente a "\ n" cuando lea el archivo.
Como resultado, si imprime "\ r \ n" en un archivo de Windows, obtendrá la secuencia "\ r \ r \ n" en el archivo físico (eche un vistazo con un editor hexadecimal).
Por supuesto, esto es un verdadero dolor cuando se trata de transferir archivos entre plataformas.
Ahora, si está escribiendo en una secuencia de red, lo haría manualmente (como la mayoría de los protocolos de red lo llaman específicamente). Pero me aseguraría de que la transmisión no esté interpretando nada (por lo que el modo binario era apropiado).
fuente
\r\n
para Windows funcionará bien.fuente
\n
funciona bien en Windows, incluida la última versión de Notepad.De Wikipedia (puede leer cuál es el correcto para su sistema operativo en ese artículo):
fuente
\r\n
Es extraño decir que lo recuerdo porque es lo contrario de la máquina de escribir que utilicé.
Bueno, si era normal no tenía necesidad de recordarlo ...
:-)
* Imagen de Wikipedia
En la máquina de escribir, cuando termina de digitar la línea, utiliza la palanca de retorno del carro , que antes hace rodar el tambor, la nueva línea y luego le permite operar manualmente el retorno del carro .
Puede escuchar de este disco de freesound.org el sonido de la alimentación de papel al principio, y alrededor de -1: 03 segundos desde el final, después de la advertencia de campana para el final del sonido de línea del tambor que rueda y después el del retorno de carro.
fuente
si está usando C #, ¿por qué no usarlo
Environment.NewLine
? (Supongo que usa algunos objetos de escritor de archivos ... simplemente páseloEnvironment.NewLine
y manejará los terminadores correctos.fuente