Chciałbym poznać różnicę (z przykładami, jeśli to możliwe) między typami podziału linii CR LF (Windows), LF (Unix) i CR (Macintosh).
line-breaks
eozzy
źródło
źródło
\n
jest zwykle reprezentowany przez wysuw linii, ale niekoniecznie jest to wysuw linii.\r
a\n
są abstrakcjami używanymi w niektórych językach programowania. Zamknięcie tego pytania ukazuje podstawowe różnice między pytaniami i utrwala dezinformację.\n
nie oznacza tego samego we wszystkich językach programowania.Odpowiedzi:
Tak naprawdę chodzi tylko o to, które bajty są przechowywane w pliku.
CR
jest kodem bajtowym powrotu karetki (od dni pisania maszyn do pisania) iLF
podobnie, dla nowego wiersza. Odnosi się tylko do bajtów umieszczonych jako znaczniki końca linii.O wiele więcej informacji, jak zawsze, na wikipedii .
źródło
CR
jest to postać ucieczki\r
iLF
postać ucieczki\n
. Ponadto Wikipedia: Newline .CR and LF
jest tylko koniec linii i nowa linia zgodnie z tym linkiem , czy to prawda?CR i LF są znakami kontrolnymi odpowiednio zakodowanymi
0x0D
(13 miejsc po przecinku) i0x0A
(10 miejsc po przecinku).Służą do oznaczania podziału linii w pliku tekstowym. Jak wskazałeś, Windows używa dwóch znaków w sekwencji CR LF; Unix używa tylko LF, a stary MacOS (wcześniejszy Mac OS X) używa CR.
Apokryficzna perspektywa historyczna:
Jak wskazał Peter , CR = Carriage Return i LF = Line Feed , dwa wyrażenia mają swoje korzenie w starych maszynach do pisania / TTY. LF przesunął papier w górę (ale zachował identyczną pozycję poziomą), a CR przywrócił „karetkę”, tak aby następny wpisany znak znalazł się w skrajnej lewej pozycji na papierze (ale w tej samej linii). CR + LF robił oba, tj. Przygotowywał się do wpisania nowej linii. W miarę upływu czasu fizyczna semantyka kodów nie miała zastosowania, a ponieważ ilość pamięci i miejsca na dyskietkach była na wagę złota, niektórzy projektanci systemów operacyjnych zdecydowali się użyć tylko jednej z postaci, po prostu nie komunikowali się ze sobą zbyt dobrze; -)
Większość współczesnych edytorów tekstu i aplikacji tekstowych oferuje opcje / ustawienia itp., Które umożliwiają automatyczne wykrywanie konwencji końca pliku i odpowiednie wyświetlanie.
źródło
CR and LF
jest tylko koniec linii i nowa linia zgodnie z tym linkiem , czy to prawda?CR+LF
) mogą wyświetlać się z podwójnymi znakami nowej linii w innych systemach. Prawdopodobnie edytor, który wyświetla tekst, obsługuje zarówno znak powrotu karetki, jak i znak wiersza jako separatory nowego wiersza i jako taki może utworzyć 2 linie, w których 1 był zamierzony. ChociażCR+LF
może być najbardziej kompatybilny, nie sądzę, że jest bez problemu.Oto dobre podsumowanie, które znalazłem:
Znak powrotu karetki (CR) (
0x0D
,\r
) przesuwa kursor na początek linii bez przechodzenia do następnej linii. Ten znak jest używany jako nowy znak linii w systemach operacyjnych Commodore i Early Macintosh (OS-9 i wcześniejszych).Znak przesunięcia wiersza (LF) (
0x0A
,\n
) przesuwa kursor w dół do następnego wiersza bez powrotu do początku wiersza. Ten znak jest używany jako nowy znak linii w systemach UNIX (Linux, Mac OSX itp.)Sekwencja końca linii (EOL) (
0x0D 0x0A
,\r\n
) to tak naprawdę dwa znaki ASCII, kombinacja znaków CR i LF. Przesuwa kursor zarówno do następnego wiersza, jak i do początku tego wiersza. Ten znak jest używany jako nowy znak wiersza w większości innych systemów operacyjnych innych niż Unix, w tym Microsoft Windows, Symbian OS i inne.Źródło
źródło
Ponieważ nie ma odpowiedzi na to pytanie, streszczono zwięźle:
Carriage Return (MAC pre-OSX)
Line Feed (Linux, MAC OSX)
Zwrot karetki i podawanie wiersza (Windows)
Jeśli widzisz kod ASCII w dziwnym formacie, są one tylko liczbą 13 i 10 w innym podstawniku / podstawie, zwykle podstawie 8 (ósemkowej) lub podstawie 16 (szesnastkowej).
http://www.bluesock.org/~willg/dev/ascii.html
źródło
Jeff Atwood opublikował na blogu najnowszy post: The Great Newline Schism
Oto esencja z Wikipedii :
źródło
<CR><CR><LF>
- więc oczywiście eksperymentowałem tylko z jednym<CR>
. Wysłałem<CR><LF>A
po długiej kolejce, i można usłyszećA
drukowane zanim karetka pełni zwrócone.<CR><CR>
i wpisując odpowiednią liczbę spacji, a następnie ponownie drukując to samo słowo: prymitywna forma pogrubienia.CR - kod ASCII 13
LF - kod ASCII 10.
Teoretycznie CR przywraca kursor do pierwszej pozycji (po lewej). LF przesuwa jedną linię przesuwając kursor o jedną linię w dół. Tak w dawnych czasach kontrolowałeś drukarki i monitory tekstowe. Znaki te są zwykle używane do oznaczania końca linii w plikach tekstowych. Różne systemy operacyjne stosowały różne konwencje. Jak zauważyłeś, system Windows używa kombinacji CR / LF, podczas gdy komputery Mac w wersjach wcześniejszych niż OSX używają tylko CR i tak dalej.
źródło
Oto szczegóły .
źródło
Smutny stan „separatorów rekordów” lub „terminatorów linii” jest dziedzictwem mrocznych epok komputerów.
Teraz przyjmujemy za pewnik, że wszystko, co chcemy reprezentować, jest w jakiś sposób uporządkowanymi danymi i jest zgodne z różnymi abstrakcjami, które definiują linie, pliki, protokoły, wiadomości, znaczniki, cokolwiek.
Ale pewnego razu nie było to do końca prawdą. Wbudowane aplikacje sterujące znakami i przetwarzanie specyficzne dla urządzenia. Układy pozbawione mózgu, które wymagały zarówno CR, jak i LF, po prostu nie miały abstrakcji dla separatorów rekordów ani terminatorów linii. CR był niezbędny, aby teletyp lub wyświetlanie wideo powróciły do pierwszej kolumny, a LF (dziś, NL, ten sam kod) był konieczny, aby przejść do następnej linii. Myślę, że pomysł zrobienia czegoś innego niż zrzucenie surowych danych do urządzenia był zbyt skomplikowany.
Wyobraź sobie, że Unix i Mac w rzeczywistości określiły abstrakcję końca linii. Niestety wymienili inne. (Unix, ahem, był pierwszy.) I oczywiście użyli kodu kontrolnego, który był już „bliski” SOP
Ponieważ prawie całe nasze dzisiejsze oprogramowanie operacyjne jest potomkiem systemów operacyjnych Unix, Mac lub MS, utknęliśmy w punkcie kończącym zamieszanie.
źródło
NL wyprowadzony z EBCDIC NL = x'15 ', który logicznie porównałby się z CRLF x'odoa ascii ... staje się to oczywiste, gdy fizycznie przenosimy dane z komputerów mainframe na środek pasma. Kolokwialnie (ponieważ tylko tajemni ludzie używają ebcdic) NL zostało zrównane z CR, LF lub CRLF
źródło