Jeśli to zrobisz, upewnij się, że otwierasz pliki w trybie binarnym . W przeciwnym razie standardowe strumienie plików C / C ++ przekonwertują „\ n” (dla plików tekstowych (domyślnie)) na specyficzną dla platformy sekwencję końca linii (ELS). W ten sposób „\ r \ n” w systemie Windows zostanie przekonwertowany na „\ r \ r \ n” na dysku fizycznym. Uwaga: jeśli użyjesz C / C ++ do odczytania pliku, nie zauważysz, że ELS zostanie ponownie przekonwertowany na „\ n” po odczytaniu z pliku.
Martin York,
@Martin - korzystam z .net i używam (w tym przykładzie) File.AppendAllText z „\ r \ n”, po prostu rzuciłem okiem na plik i nie ma duplikacji na końcu linia. Magia?
Daniel Mošmondor
@Daniel: Powinienem był być bardziej szczegółowy. C / C ++ strumieni. Po skojarzeniu z plikiem i otwarciu w trybie tekstowym . Zależy to również od tego, jak spojrzysz na plik (użyj heksitora).
Martin York
@Martin - używał PSPad w trybie szesnastkowym ...
Daniel Mošmondor
1
Na starożytnych klawiaturach klawisz Enter nazywał się klawiszem Return. Tak więc powrót pojawił się jako pierwszy, a następnie w odpowiedzi wygenerowano podawanie liniowe. To wszystko jest tak oczywiste, gdy masz za dużo historii.
Mark Ransom
Odpowiedzi:
1084
Użyłbym słowa „ r etur n ”, aby pamiętać, że r występuje przed n.
I aby pamiętać, że słowem, które należy użyć, jest return , pamiętaj, że \ r to return return . Nie pamiętaj, że „Return” to nazwa klawisza na klawiaturze komputera Mac. W przeciwnym razie możesz później spojrzeć na klawiaturę komputera, zobaczyć klawisz o nazwie „Enter” i pomylić kolejność liter!
Rob Kennedy
3
@David Ale zastanawiałem się, że efekt \n\ri \r\nto samo, nie robią ten sam efekt? Czy dostrzegasz różnicę?
Mr.Anubis
7
@ Mr.Anubis, jeśli masz pewną drukarkę igłową, nie powinno być ŻADNEJ różnicy, ponieważ kolejność poleceń nie powinna być ważna. Jednak w przypadku niektórych drukarek dostaniesz dodatkową pustą linię lub jej brak. I wszystko, co powiedziano powyżej, dotyczy edytorów tekstu - będą pomieszane, klasy TextStream zachorują i tak dalej. Zamówienie jest ważne. :)
Daniel Mošmondor
12
@ DanielMošmondor Alternatywnie, możesz po prostu pamiętać, że kolejność jest ważna. Albo, że kiedy poprosiłeś w SO, ktoś dał ci RemiNder, o którym później zapomniałeś. Lub, że nie możesz użyć swojego nazwiska jako przypomnienia, ponieważ kolejność r i n jest odwrócona :)
Daniel Daranas
5
@RobKennedy haha wiesz, że tu przyszedłem i czytałem o powrocie i pomyślałem „świetnie!”. Potem czytam twój komentarz. Teraz za każdym razem, gdy nie pamiętam, na którym kluczu nie powinienem patrzeć - patrzę na mój klawisz „Enter” i myślę, że „coś tu jest bardzo nie tak” ... haha, nad tym myśląc!
Wayne Uroda
53
Jeśli używasz C #, powinieneś użyć Environment.NewLine, który zgodnie z MSDN to:
Ciąg zawierający „\ r \ n” dla platform innych niż Unix lub ciąg zawierający „\ n” dla platform Unix.
W rzeczywistości tego rodzaju zależy od tego, co robisz. Jeśli wysyłasz zwykły tekst do konsoli lub do pliku do użytku lokalnego, Environment.NewLinejest w porządku. Jeśli jednak piszesz rzeczy w dobrze zdefiniowanym formacie, format może również definiować nowy wiersz. Na przykład protokół HTTP stwierdza, że musisz użyć\r\n jako terminatora linii dla nagłówków itp., Niezależnie od platformy.
Matti Virkkunen
3
Tak, to naprawdę zła rada.
IvanP
Dlatego musisz uciec od wiadomości internetowych i zbudować testy jednostkowe, aby sprawdzić, czy wysyłanie \ r \ n (Windows), \ r (mac), \ n (linux) wysyła poprawnie jako \ r \ n do serwera.
TamusJRoyce
37
Nowa linia zależy od systemu operacyjnego:
DOS &Windows: \r\n 0D0A(hex),13,10(decimal)Unix&Mac OS X: \n,0A,10Macintosh(OS 9): \r,0D,13
O dziwo, jestem jednym z tych ludzi, którzy wiedzą 0D0Ana pamięć, ale wciąż mylą \ri \n.
Nyerguds
1
Lub, pamiętam, że \ r to powrót karetki, a \ n to wysuw wiersza ... po prostu nie pamiętam ich kolejności, więc to nie pomaga w zapamiętaniu, który jest 0D, a który 0A;)
Nyerguds
20
Sekwencja to CR (Carriage Return) - LF (Line Feed). Pamiętasz drukarki igłowe? Dokładnie. Tak więc - poprawna kolejność to \ r \ n
Nie zgadzam się, @David. Samo myślenie o drukarkach igłowych (lub maszynach do pisania, ponieważ to one mają karetkę do powrotu) nie wystarczy. Mając tylko podstawowe informacje o tym, jak działają, nie ma powodu, aby sądzić, że ma to znaczenie, czy przejdziemy pracę przed czy po powrocie na początek linii. Zarówno \ r \ n, jak i \ n \ r umieszczają papier w tej samej pozycji.
Rob Kennedy
@ikegami na większości drukarek, nie na wszystkich. Mieli także przełączniki DIP, aby skonfigurować to zachowanie. :)
Daniel Mošmondor
5
Jednym z powodów umieszczenia przesuwu linii po powrocie karetki jest to, że skraca całkowity wymagany czas - gdy głowica wraca do lewej krawędzi papieru, płyta dociskowa może zindeksować jedną linię. Dłuższa operacja rozpoczyna się jako pierwsza, więc cała operacja kończy się w czasie, który trwa dłużej. Zrobiliśmy wtedy wiele rzeczy z takich powodów; wyobraź sobie, że czekasz kilkaset linii z prędkością 110 bodów ...
Jerry Andrews,
8
W każdym języku .NET Environment.NewLinebyłoby preferowane.
Nie działa dla ciągów ciągłych. W razie potrzeby lepiej nie używać stałej i zamiast tego używać łańcucha statycznego;)
TamusJRoyce
5
Uważaj, aby to zrobić ręcznie.
W rzeczywistości Radzę nie robi tego w ogóle.
W rzeczywistości mówimy o sekwencji zakończenia linii LTS, która jest specyficzna dla platformy.
Jeśli otworzysz plik w trybie tekstowym (tzn. Nie binarnym), strumienie przekonwertują „\ n” na poprawny LTS dla twojej platformy. Następnie przekonwertuj LTS z powrotem na „\ n” podczas czytania pliku.
W rezultacie, jeśli wydrukujesz „\ r \ n” do pliku systemu Windows, otrzymasz sekwencję „\ r \ r \ n” w pliku fizycznym (spójrz za pomocą edytora szesnastkowego).
Oczywiście jest to prawdziwy ból, jeśli chodzi o przesyłanie plików między platformami.
Teraz, jeśli piszesz do strumienia sieciowego, zrobiłbym to ręcznie (ponieważ większość protokołów sieciowych tak to nazywa). Ale upewniłbym się, że strumień nie dokonuje żadnej interpretacji (więc tryb binarny był odpowiedni).
Singiel \nrównież świetnie sobie radzi w systemie Windows, w tym w najnowszej wersji Notatnika.
André Caron
Myślę, że nowoczesne edytory wykryją zakończenia linii, ponieważ różne systemy operacyjne używają różnych zakończeń.
David Snabel-Caunt
1
Właściwie nie: Jeśli wydrukujesz to do pliku (plik std C / C ++ otwarty w trybie tekstowym) w systemie Windows, plik fizyczny będzie zawierał „\ r \ r \ n” (sprawdź to za pomocą edytora szesnastkowego). Po ponownym odczytaniu „\ r \ n” jest ponownie konwertowane na pojedynczy „\ n”.
Martin York
2
Właściwie @DavidCaunt, właśnie próbowałem \ n i nie działa z notatnikiem na Win8.
philk
4
Z Wikipedii (możesz przeczytać, który jest odpowiedni dla twojego systemu operacyjnego w tym artykule):
Systemy oparte na ASCII lub zgodnym zestawie znaków używają LF (przesunięcie wiersza, „\ n”, 0x0A, 10 w systemie dziesiętnym) lub CR (powrót karetki, „\ r”, 0x0D, 13 w systemie dziesiętnym) indywidualnie lub CR, po którym następuje LF (CR + LF, '\ r \ n', 0x0D0A).
Dziwnie jest powiedzieć, że pamiętam, ponieważ jest to przeciwieństwo używanej maszyny do pisania .
Cóż, jeśli to normalne, nie musiałbym o tym pamiętać ...:-)
* Zdjęcie z Wikipedii
W maszynie do pisania po zakończeniu cyfry linii używasz dźwigni powrotu karetki , która wcześniej sprawia, że bęben obraca się , nowa linia , a po tym pozwala ręcznie obsługiwać powrót karetki .
Możesz posłuchać z tego nagrania ze strony freesound.org dźwięk podawania papieru na początku i około -1: 03 sekund od końca, po ostrzeżeniu dzwonka o końcu linii dźwięku bębna, który się toczy i po jeden ze zwrotu karetki.
jeśli używasz C #, dlaczego nie używać Environment.NewLine? (Zakładam, że używasz niektórych obiektów do zapisywania plików ... po prostu przekaż go, Environment.NewLinea obsłuży odpowiednie terminatory.
Odpowiedzi:
Użyłbym słowa „ r etur n ”, aby pamiętać, że r występuje przed n.
źródło
\n\r
i\r\n
to samo, nie robią ten sam efekt? Czy dostrzegasz różnicę?Jeśli używasz C #, powinieneś użyć
Environment.NewLine
, który zgodnie z MSDN to:źródło
Environment.NewLine
jest w porządku. Jeśli jednak piszesz rzeczy w dobrze zdefiniowanym formacie, format może również definiować nowy wiersz. Na przykład protokół HTTP stwierdza, że musisz użyć\r\n
jako terminatora linii dla nagłówków itp., Niezależnie od platformy.Nowa linia zależy od systemu operacyjnego:
Więcej informacji tutaj: https://ccrma.stanford.edu/~craig/utility/flip/
W razie wątpliwości skorzystaj z dowolnej darmowej przeglądarki / edytora szesnastkowego, aby zobaczyć, jak plik koduje nową linię.
Dla mnie używam następującego przewodnika, aby pomóc mi zapamiętać: 0D0A = \ r \ n = CR, LF = ca rr iage r eturn, li n e feed
źródło
0D0A
na pamięć, ale wciąż mylą\r
i\n
.Sekwencja to CR (Carriage Return) - LF (Line Feed). Pamiętasz drukarki igłowe? Dokładnie. Tak więc - poprawna kolejność to \ r \ n
źródło
W każdym języku .NET
Environment.NewLine
byłoby preferowane.źródło
Uważaj, aby to zrobić ręcznie.
W rzeczywistości Radzę nie robi tego w ogóle.
W rzeczywistości mówimy o sekwencji zakończenia linii LTS, która jest specyficzna dla platformy.
Jeśli otworzysz plik w trybie tekstowym (tzn. Nie binarnym), strumienie przekonwertują „\ n” na poprawny LTS dla twojej platformy. Następnie przekonwertuj LTS z powrotem na „\ n” podczas czytania pliku.
W rezultacie, jeśli wydrukujesz „\ r \ n” do pliku systemu Windows, otrzymasz sekwencję „\ r \ r \ n” w pliku fizycznym (spójrz za pomocą edytora szesnastkowego).
Oczywiście jest to prawdziwy ból, jeśli chodzi o przesyłanie plików między platformami.
Teraz, jeśli piszesz do strumienia sieciowego, zrobiłbym to ręcznie (ponieważ większość protokołów sieciowych tak to nazywa). Ale upewniłbym się, że strumień nie dokonuje żadnej interpretacji (więc tryb binarny był odpowiedni).
źródło
\r\n
dla Windows będzie dobrze.źródło
\n
również świetnie sobie radzi w systemie Windows, w tym w najnowszej wersji Notatnika.Z Wikipedii (możesz przeczytać, który jest odpowiedni dla twojego systemu operacyjnego w tym artykule):
źródło
\r\n
Dziwnie jest powiedzieć, że pamiętam, ponieważ jest to przeciwieństwo używanej maszyny do pisania .
Cóż, jeśli to normalne, nie musiałbym o tym pamiętać ...
:-)
* Zdjęcie z Wikipedii
W maszynie do pisania po zakończeniu cyfry linii używasz dźwigni powrotu karetki , która wcześniej sprawia, że bęben obraca się , nowa linia , a po tym pozwala ręcznie obsługiwać powrót karetki .
Możesz posłuchać z tego nagrania ze strony freesound.org dźwięk podawania papieru na początku i około -1: 03 sekund od końca, po ostrzeżeniu dzwonka o końcu linii dźwięku bębna, który się toczy i po jeden ze zwrotu karetki.
źródło
jeśli używasz C #, dlaczego nie używać
Environment.NewLine
? (Zakładam, że używasz niektórych obiektów do zapisywania plików ... po prostu przekaż go,Environment.NewLine
a obsłuży odpowiednie terminatory.źródło