Myślę, że \n
przesuwa igłę w dół i \r
przesuwa igłę na początek linii (wyrównanie do lewej)? Nie jestem jednak pewien. Więc jeśli się mylę, popraw mnie ....
W każdym razie, powiedziano mi, że Windows i Linux uchwyt newlines
i carriage returns
inaczej. Chciałbym wiedzieć, jak traktują je inaczej i niektóre miejsca, w których warto pamiętać. Dzięki za odpowiedź.
linux
windows
newlines
carriage-return
千里 ち ゃ ん
źródło
źródło
\r\n
w systemie Windows\n\r
jest to w porządku, ale tak nie jest i pamiętam to, ponieważ\r\n
jest akronimem dla zarejestrowanej pielęgniarki. Słyszę również, że\n
ludzie używają tego w Linuksie i\r
nie są używane w tym samym celu co\r\n
.\r
jest używany w naprawdę starym MacOS. Jednak nie zweryfikowałem tych faktów.\r
a\n
ponieważ sposób postępowania\n
zależy od tego, gdzie go używasz. Lepiej do nich zadzwonićCR
iLF
.Odpowiedzi:
To mniej więcej prawda, ale przede wszystkim ciekawość historyczna. Pierwotnie, linefeed (LF) był używany do przesuwania papieru o jedną linię na drukarkach i terminalach drukowanych ( teleprinters ); powrót karetki (CR) zwrócił głowicę drukującą na początek linii.
Prawdopodobnie nadal działa na nowoczesnych drukarkach, gdy są używane w „trybie tekstowym”, ale poza tym obecnie nie ma większego znaczenia.
Różnica polega po prostu na tym, że projektanci systemów operacyjnych musieli wybrać sposób reprezentowania początku nowej linii w tekście w plikach komputerowych. Z różnych powodów historycznych w świecie Uniksa / Linuksa jako nowy znak linii wybrano pojedynczy znak LF; MS-DOS wybrał CR + LF, a Windows to odziedziczył. Dlatego różne platformy używają różnych konwencji.
W praktyce staje się to coraz mniejszym problemem. Znacznik nowej linii jest tak naprawdę istotny tylko dla piktogramów przetwarzających „zwykły tekst”, a nie ma ich tak wiele - w większości wpływa tylko na kod źródłowy programu, pliki konfiguracyjne i niektóre proste pliki tekstowe z dokumentacją. Obecnie większość programów obsługujących tego rodzaju pliki (edytory, kompilatory itp.) Może obsługiwać obie konwencje nowego wiersza, więc nie ma znaczenia, który wybierzesz.
Są przypadki, w których narzędzia nalegają na „swoją” konwencję nowego wiersza (np. Skrypty powłoki Uniksa nie mogą używać CR + LF), w którym to przypadku należy użyć właściwej.
źródło
\n\r
i\n
są takie same? Na przykład, gdybym analizował plik tekstowy, który był edytowany na czyimś komputerze i zawierał podział wierszy zarówno w wersji Linux, jak i Windows, czy wykonałbym poleceniepreg_match
for\n
i\n\r
dałoby inne wyniki?CR i LF
Amerykański Standard Code for Information Interchange (ASCII) zdefiniował znaki kontrolne, w tym CARRIAGE-RETURN (CR) i LINE-FEED (LF), które były (i nadal są) używane do kontrolowania pozycji drukowania na drukarkach w sposób analogiczny do mechaniczne maszyny do pisania, które poprzedziły wczesne drukarki komputerowe.
Zależność od platformy
W Windows tradycyjnym separatorem linii w plikach tekstowych jest CR, a po nim LF
W starych (wcześniejszych niż OSX) systemach Apple Macintosh tradycyjnym separatorem linii w plikach tekstowych był CR
W systemach Unix i Linux tradycyjnym separatorem linii w plikach tekstowych jest LF.
\ n i \ r
W wielu językach programowania i skryptów
\n
oznacza „nowy wiersz”. Czasami (ale nie zawsze) oznacza to znak ASCII LINE-FEED (LF), który, jak mówisz, przesuwa kursor (lub pozycję drukowania) w dół o jedną linię. W drukarce lub maszynie do pisania spowoduje to przesunięcie papieru o jedną linię w górę.Niezmiennie
\r
oznacza znak ASCII CARRIAGE-RETURN (CR), którego nazwa faktycznie pochodzi od mechanicznych maszyn do pisania, w których znajdował się klawisz powrotu karetki, który spowodował, że rolka („karetka”), która niosła papier, przesunęła się w prawo, napędzana przez sprężynę, tak daleko, jak to możliwe. W ten sposób ustawiając bieżącą pozycję pisania na lewym marginesie.Programowanie
W niektórych językach programowania
\n
może oznaczać zależną od platformy sekwencję znaków kończących lub oddzielających wiersze w pliku tekstowym. Na przykład w Perluprint "\n"
produkuje inną sekwencję znaków w systemie Linux niż w systemie Windows.W Javie najlepszą praktyką jest to, że jeśli chcesz używać natywnych zakończeń linii dla platformy wykonawczej, nie należy jej używać
\n
ani\r
wcale. Powinieneś użyćSystem.getProperty("line.separator")
. Powinieneś używać\n
i\r
gdzie chcesz LF i CR niezależnie od platformy (np. Jak w HTTP, FTP i innych protokołach komunikacji internetowej).Uniksowy styl
W powłoce uniksowej
stty
można użyć polecenia, aby spowodować translację powłoki między tymi różnymi konwencjami. Na przykładstty -onlcr
spowoduje, że powłoka następnie przetłumaczy wszystkie wychodzące LF na CR LF.Linux i OSX przestrzegają konwencji Uniksa
Pliki tekstowe
Pliki tekstowe są nadal niezwykle ważne i szeroko stosowane. Na przykład HTML i XML to przykłady plików tekstowych. Większość ważnych protokołów internetowych, takich jak HTTP, jest zgodna z konwencjami plików tekstowych i zawiera specyfikacje zakończeń linii.
Drukarki
Większość drukarek innych niż najtańsze nadal szanuje CR i LF. W rzeczywistości są one fundamentalne dla najczęściej używanych języków opisu strony - PCL i Postscript.
źródło
line.separator
. To naprawdę zależy od tego, czego chcesz.println()
używa automatycznieline.separator
, więc jeśli chcesz mieć natywne zakończenia linii, możesz ich użyćprintln()
(a jeśli potrzebujesz określonego rodzaju zakończenia linii, nie używaj go, ale używaj „\ n” itp.).\n
znak kontrolny jest inny niż ASCII LF (inny niż systemy oparte na EBCDIC)? Mam na myśli to, co\n
oznacza literał ciąg lub znak, a nie efekt wysłania go do pliku lub urządzenia wyjściowego.\n
zawsze jest kod ASCII (i Unicode) 10, ponieważ JLS tak mówi wprost (JLS 3.10.6, „Sekwencje specjalne dla literałów znakowych i ciągowych” - sprawdziłem :-)). W przypadku innych języków - dobre pytanie.Krótko mówiąc, był potrzebny do drukarek, ale teraz systemy operacyjne robią to nieco inaczej. W większości przypadków dobrze jest po prostu zrobić zarówno CR, jak i LF,
\r\n
a w większości przypadków będzie to działać dobrze.źródło
\r
lub powoduje jakąś zmianę zachowania?