2012-04-05 15 views
14

L'indicatore di interruzione di riga su Windows deve essere CR+LF mentre su Unix è solo LF.Perché " n" fornisce una nuova riga su Windows?

Quindi, quando uso qualcosa come Console.Write("line1\nline2");, perché dovrebbe funzionare "correttamente" e darmi due righe? Mi aspetto che questo \n non funzioni e solo una combinazione di \r\n funzionerebbe.

+1

Che cosa stai usando per visualizzare un file di questo tipo? – Oded

+2

È probabile che C# stia facendo la conversione per te. –

+0

Sto stampando questa riga sulla console della riga di comando, usando 'Console.Write()'. – user1032613

risposta

11

'\ n' è il carattere di avanzamento riga. Tradizionalmente, la stampante faceva rotolare la carta su una riga. '\ r' è il carattere Carriage Return, che tradizionalmente ha portato la testina della stampante a spostarsi sul bordo sinistro del foglio.

Nelle stampanti e console che interpretano i personaggi in questo modo, l'uscita del line1\nline2 sarebbe

line1 
    line2 

molte console (e redattori) interpreterà '\ n' per significare che si desidera avviare una nuova riga e posizionare il cursore all'inizio di quella nuova riga. Questo è quello che vedi qui.

È necessario utilizzare Environment.NewLine anziché codificare manualmente determinate costanti.

+0

Console è un visualizzatore, suppongo? –

+0

@ OAOD: Certo, 'type myFileWithSlashNDelimiters' visualizzerà il testo, sia come linee separate che come una lunga linea. Non sei sicuro di quale, ma in entrambi i casi è uno spettatore. Ho risposto prima del suo commento chiarificatore che sta usando Console.Write(). –

+0

'\ n' è il carattere di avanzamento riga nella tabella ASCII, quindi, ovviamente, si ottiene una nuova riga. La cosa inaspettata è che il metodo 'Console.Write' sembra implicare anche' \ r', che il richiedente non fornisce, e che è il ritorno a capo. – H2ONaCl

0

Codifica file! = Console interpretazione.

In altre parole, mentre il "Windows standard" di CR + LF esiste per i file, solo il LF, o \n ha provocato il ritorno a capo appropriato e nuova interpretazione la linea di finestre di console.

0

\ n è il carattere di avanzamento riga. Su entrambi i sistemi * nix e Windows dovrebbe creare 2 linee. \ R è il ritorno a capo, sposta lo strumento di scrittura all'inizio della riga.

La maggior parte delle moderne console/redattori sono abbastanza resistente da interpretare \ n di \ r \ n

0

Nella mia esperienza, quando si uscita per la console con WriteLine() accetta la \ n carattere di escape. Quando si utilizza StreamWriter e si chiama WriteLine(), è possibile digitare \ r \ n per passare a una nuova riga. Suppongo che la Console sia stata programmata per accettare il carattere di escape \ n senza il ritorno a capo \ r.

8

Questo è solo il comportamento standard della console di Windows sottostante. Un'app C nativa farà esattamente la stessa cosa se si invia 0x0A alla console.

Naturalmente, si dovrebbe usare Environment.NewLine per le nuove linee. Environment.NewLine risolve in \r\n su Windows e \n su sistemi Unix.

Problemi correlati