Promemoria - \ r \ n o \ n \ r?


390

Non riesco proprio a ricordare quelli. Quindi, qual è il modo giusto per terminare correttamente le vecchie linee ASCII?


11
Se lo fai, assicurati di aprire i file in modalità binaria . In caso contrario, i flussi di file C / C ++ standard convertiranno "\ n" (per i file di testo (impostazione predefinita)) in una sequenza di fine riga specifica della piattaforma (ELS). Pertanto "\ r \ n" su Windows verrà convertito in "\ r \ r \ n" sul disco fisico. Nota: se si utilizza semplicemente C / C ++ per leggere nuovamente il file, non si noterà poiché l'ELS viene riconvertito in "\ n" quando viene letto dal file.
Martin York,

@Martin - Sono in .net e sto usando (per questo esempio) File.AppendAllText, con "\ r \ n", e ho appena dato un'occhiata a un file e non c'è duplicazione alla fine di la linea. Magia?
Daniel Mošmondor,

@Daniel: avrei dovuto essere più specifico. I flussi C / C ++ . Se associato a un file e aperto in modalità testo . Dipende anche da come guardi il file (usa un hexeditor).
Martin York,

@Martin - usato PSPad in modalità esadecimale ...
Daniel Mošmondor il

1
Sulle tastiere antiche, il tasto Invio era chiamato tasto Invio. Quindi il Ritorno è arrivato per primo, quindi il Linefeed è stato generato in risposta. È tutto così ovvio quando hai troppa storia.
Mark Ransom,

Risposte:


1084

Userei la parola ' r etur n ' per ricordare, la r viene prima della n.


116
E per ricordare che la parola da usare è return , ricorda che \ r è il ritorno a capo . Non ricordare che "Invio" è il nome del tasto sulle tastiere Mac, altrimenti potresti guardare la tastiera di un PC, vedere il tasto chiamato "Invio" e sbagliare l'ordine delle lettere!
Rob Kennedy,

3
@ David Ma mi chiedevo quell'effetto di \n\red \r\nè lo stesso, non fanno lo stesso effetto? puoi dire la differenza?
Mr. Anubis,

7
@ Mr.Anubis se hai una certa stampante ad aghi, non ci dovrebbero essere differenze, dato che l'ordine dei comandi non dovrebbe essere importante. Tuttavia, su alcune stampanti, otterrai una linea vuota in più o nessun avanzamento di linea. E tutto quanto detto sopra si applica agli editor di testo: saranno confusi, le classi TextStream si ammaleranno e così via. L'ordine è importante. :)
Daniel Mošmondor,

12
@ DanielMošmondor In alternativa, potresti semplicemente ricordare che l'ordine è impoRtaNt. O che quando hai chiesto a SO qualcuno ti ha dato un RemiNder, che in seguito hai dimenticato. O che non puoi usare il tuo cognome come promemoria, perché l'ordine di re n è invertito :)
Daniel Daranas,

5
@RobKennedy haha ​​sai che sono venuto qui e ho letto del ritorno, e ho pensato "fantastico!". Poi ho letto il tuo commento. Ora ogni volta che non riesco a ricordare quale chiave non dovrei guardare - guardo la mia chiave "Enter" e penso "qui c'è qualcosa di molto sbagliato" ... ahah a pensarci!
Wayne Uroda,

53

Se stai usando C # dovresti usare Environment.NewLine, che secondo MSDN è:

Una stringa contenente "\ r \ n" per piattaforme non Unix o una stringa contenente "\ n" per piattaforme Unix.


46
In realtà questo tipo di dipende da cosa stai facendo. Se stai semplicemente inviando testo in chiaro alla console o in un file per uso locale, Environment.NewLineva bene. Tuttavia, se stai scrivendo cose in un formato ben definito, anche il formato può definire la nuova riga. Ad esempio, il protocollo HTTP afferma che è necessario utilizzare \r\ncome terminatore di linea per intestazioni ecc., Indipendentemente dalla piattaforma.
Matti Virkkunen,

3
Sì, questo è davvero un cattivo consiglio.
IvanP,

Questo è il motivo per cui è necessario sfuggire ai messaggi Web e creare test di unità per verificare l'invio di \ r \ n (windows), \ r (mac), \ n (linux) in modo corretto come \ r \ n al server web.
TamusJRoyce,

37

La nuova linea dipende dal tuo sistema operativo:

DOS & Windows: \r\n 0D0A (hex), 13,10 (decimal)
Unix & Mac OS X: \n, 0A, 10
Macintosh (OS 9): \r, 0D, 13

Maggiori dettagli qui: https://ccrma.stanford.edu/~craig/utility/flip/

In caso di dubbi, utilizzare qualsiasi visualizzatore / editor esadecimale freeware per vedere come un file codifica la sua nuova riga.

Per me, utilizzo la seguente guida per aiutarmi a ricordare: 0D0A = \ r \ n = CR, LF = ca rr iage r eturn, li n e feed


7
Stranamente, sono una di queste persone che conosce 0D0Aa memoria, ma confonde ancora \re \n.
Nyerguds,

1
Oppure, ricordo che \ r è un ritorno a capo e \ n è un avanzamento riga ... è solo che non ricordo il loro ordine, quindi non aiuta a ricordare quale è 0D e quale è 0A;)
Nyerguds

20

La sequenza è CR (ritorno a capo) - LF (avanzamento riga). Ricordi le stampanti ad aghi? Esattamente. Quindi - l'ordine corretto è \ r \ n


Penso che questa sia la risposta più logica
David Snabel-Caunt il

12
LF + CR farebbe lo stesso CR + LF sulle stampanti.
ikegami,

10
Non sono d'accordo, @ David. Basti pensare alle stampanti a matrice di punti (o macchine da scrivere, del resto, dal momento che sono quelle che hanno un carrello per tornare) non è sufficiente. Con solo le informazioni di base su come funzionano, non c'è motivo di pensare che sia importante se avanziamo il documento prima o dopo il ritorno all'inizio della riga. Sia \ r \ n che \ n \ r mettono la carta nella stessa posizione.
Rob Kennedy,

@ikegami sulla maggior parte delle stampanti, non su tutte. Avevano anche interruttori DIP per configurare quel comportamento. :)
Daniel Mošmondor,

5
Un motivo per inserire l'alimentazione di riga dopo il ritorno del carrello è che riduce il tempo totale richiesto - mentre la testina sta tornando al bordo sinistro della carta, il rullo può indicizzare una riga. L'operazione più lunga inizia per prima, quindi l'intera operazione viene completata nel tempo necessario per l'esecuzione dell'operazione più lunga. Allora abbiamo fatto molte cose per ragioni del genere; immagina di aspettare un paio di centinaia di linee a 110 baud ...
Jerry Andrews,

8

In qualsiasi lingua .NET, Environment.NewLinesarebbe preferibile.


Non funziona per stringhe costanti. Se necessario, meglio non usare costante e usare invece stringhe statiche;)
TamusJRoyce

5

Fai attenzione a farlo manualmente.
In effetti consiglierei di non farlo affatto.

In realtà stiamo parlando della sequenza di terminazione di linea LTS specifica per la piattaforma.

Se apri un file in modalità testo (cioè non binario), i flussi convertiranno "\ n" nell'LTS corretto per la tua piattaforma. Quindi riconvertire l'LTS in "\ n" quando si legge il file.

Di conseguenza se si stampa "\ r \ n" su un file Windows, si otterrà la sequenza "\ r \ r \ n" nel file fisico (consultare un editor esadecimale).

Naturalmente questo è un vero dolore quando si tratta di trasferire file tra piattaforme.

Ora, se stai scrivendo su un flusso di rete, lo farei manualmente (poiché la maggior parte dei protocolli di rete lo chiama in modo specifico). Ma mi assicurerei che il flusso non stia interpretando (quindi la modalità binaria era appropriata).


4

\r\n per Windows andrà bene.


Un singolo \nfunziona bene anche su Windows, inclusa l'ultima versione di Notepad.
André Caron,

Penso che i moderni editor rileveranno le terminazioni di linea, poiché diversi sistemi operativi utilizzano terminazioni diverse.
David Snabel-Caunt,

1
In realtà no: se lo stampi su un file (file std C / C ++ aperto in modalità testo) su Windows, il file fisico conterrà "\ r \ r \ n" (controllalo con un editor esadecimale). Quando lo rileggi, "\ r \ n" viene riconvertito in un singolo "\ n".
Martin York,

2
In realtà, @DavidCaunt, ho appena provato \ n e non funziona con il blocco note su Win8.
philk,

4

Da Wikipedia (puoi leggere quale è corretto per il tuo sistema operativo in quell'articolo):

I sistemi basati su ASCII o un set di caratteri compatibili utilizzano LF (avanzamento riga, '\ n', 0x0A, 10 in decimale) o CR (ritorno a capo, '\ r', 0x0D, 13 in decimale) singolarmente o CR seguito da LF (CR + LF, '\ r \ n', 0x0D0A).


3

\r\n

Strano a dirlo, lo ricordo perché è l'opposto della macchina da scrivere che ho usato.
Beh, se era normale non avevo bisogno di ricordarmelo ...:-)

macchina da scrivere da Wikipedia * Immagine da Wikipedia

Nella macchina da scrivere quando finisci di digitare la linea usi la leva di ritorno del carrello , che prima fa rotolare il tamburo, la nuova riga e dopo ti consente di azionare manualmente il ritorno del carrello .

Puoi ascoltare da questo disco da freesound.org il suono dell'alimentazione della carta all'inizio, e circa -1: 03 secondi dalla fine, dopo l'avvertimento della campana per la fine del suono della linea del tamburo che rotola e dopo quello del ritorno a capo.


2

se stai usando C #, perché non lo usi Environment.NewLine? (suppongo che tu usi alcuni oggetti del file writer ... basta passarlo Environment.NewLinee gestirà i giusti terminatori.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.