2012-04-05 9 views
14

El marcador de salto de línea en Windows debe ser CR+LF mientras que en Unix, es solo LF.¿Por qué " n" da una nueva línea en Windows?

Entonces, cuando uso algo como Console.Write("line1\nline2");, ¿por qué debería funcionar "correctamente" y darme dos líneas? Espero que esto \n no funcione, y solo funcionaría un combo de \r\n.

+1

¿Qué está utilizando para ver un archivo de este tipo? – Oded

+2

Las posibilidades son que C# implícitamente realiza la conversión por usted. –

+0

Estoy imprimiendo esta línea en la consola de la línea de comandos, usando 'Console.Write()'. – user1032613

Respuesta

11

'\ n' es el carácter Línea de alimentación. Tradicionalmente, hacía que la impresora enrollara el papel en una línea. '\ r' es el carácter Retorno de carro, que tradicionalmente hacía que el cabezal de la impresora se moviera al extremo izquierdo del papel.

En las impresoras y consolas que interpretan los personajes de esta forma, la salida de line1\nline2 sería

line1 
    line2 

Muchas consolas (y editores) interpretará '\ n' en el sentido de que desea iniciar un nuevo línea y posiciona el cursor al comienzo de esa nueva línea. Eso es lo que ves aquí.

Debe usar Environment.NewLine en lugar de codificar cualquier constancia particular.

+0

¿La consola es un visor, supongo? –

+0

@OAOD: claro, 'tipo myFileWithSlashNDelimiters' mostrará el texto, ya sea como líneas separadas o como una línea larga. No estoy seguro de cuál, pero de cualquier forma es un espectador. Respondí antes de su comentario clarificador que está usando Console.Write(). –

+0

'\ n' es el carácter Línea de alimentación en la tabla ASCII, por lo tanto, por supuesto, obtiene una nueva línea. Lo inesperado es que el método 'Console.Write' parece también implicar' \ r', que el asker no está suministrando y que es el retorno de carro. – H2ONaCl

0

Codificaciones de archivo! = Console interpretación.

En otras palabras, mientras que el "estándar de Windows" de CR + LF existe para los archivos, sólo el LF, o \n ha dado como resultado el retorno de carro y nueva interpretación apropiada línea en ventanas de la consola.

0

\ n es el carácter de avance de línea. En los sistemas * nix y Windows debería crear 2 líneas. El \ r es el retorno de carro, mueve el instrumento de escritura al comienzo de la línea.

mayoría de las consolas modernas/editores son lo suficientemente resistente como para interpretar \ n como \ r \ n

0

En mi experiencia, cuando la salida de la consola con WriteLine() acepta la \ n carácter de escape. Cuando usa un StreamWriter y llama a WriteLine() hace que escriba \ r \ n para pasar a una nueva línea. Supongo que la consola ha sido programada para aceptar el \ n caracter de escape sin el retorno de carro \ r.

8

Este es solo el comportamiento estándar de la consola subyacente de Windows. Una aplicación C nativa hará exactamente lo mismo si imprime 0x0A en la consola.

Por supuesto, debe usar Environment.NewLine para sus nuevas líneas. Environment.NewLine se resuelve en \r\n en Windows y \n en Unix como sistemas.

Cuestiones relacionadas