Myslím, že \n posune jehlu dolů a \r posune jehlu na začátek řádku (zarovnání doleva)? Nejsem si však jistý
To je víceméně pravda, ale hlavně historická kuriozita. Původně se linefeed (LF) používal k posunu papíru o jeden řádek na tiskárnách a tištěných terminálech (dálnopisech); návrat vozíku (CR) vrátil tiskovou hlavu na začátek řádku.
To pravděpodobně stále funguje na moderních tiskárnách při použití v "textovém režimu", ale jinak je to dnes málo relevantní.
Každopádně mi bylo řečeno, že Windows a Linux zpracovávají nové řádky a návraty vozíků jinak.
Rozdíl je jednoduše:návrháři OS si museli vybrat, jak znázornit začátek nového řádku v textu v počítačových souborech. Z různých historických důvodů byl v Unix/linuxovém světě zvolen jako znak nového řádku jeden znak LF; MS-DOS zvolil CR+LF a Windows to zdědil. Různé platformy tedy používají různé konvence.
V praxi je to čím dál menší problém. Značka nového řádku je relevantní pouze pro programy, které zpracovávají "prostý text", a není jich tolik - většinou se týká pouze zdrojového kódu programu, konfiguračních souborů a některých jednoduchých textových souborů s dokumentací. V současné době většina programů zpracovávajících tyto druhy souborů (editory, kompilátory atd.) dokáže zpracovat obě konvence nového řádku, takže nezáleží na tom, kterou si vyberete.
Existují některé případy, kdy nástroje trvají na „své“ konvenci nového řádku (např. unixové shellové skripty nesmí používat CR+LF), v takovém případě musíte použít ten správný.
CR a LF
Americký standardní kód pro výměnu informací (ASCII) definoval řídicí znaky včetně CARRIAGE-RETURN (CR) a LINE-FEED (LF), které byly (a stále jsou) používány k řízení pozice tisku na tiskárnách způsobem analogickým mechanické psací stroje, které předcházely raným počítačovým tiskárnám.
Závislost na platformě
Ve Windows je tradičním oddělovačem řádků v textových souborech CR následovaný LF
Ve starých (před OSX) systémech Apple Macintosh byl tradičním oddělovačem řádků v textových souborech CR
V Unixu a Linuxu je tradičním oddělovačem řádků v textových souborech LF.
\n a \r
V mnoha programovacích a skriptovacích jazycích \n
znamená "nový řádek". Někdy (ale ne vždy) to znamená znak ASCII LINE-FEED (LF), který, jak říkáte, posune kurzor (nebo pozici tisku) o jeden řádek dolů. V tiskárně nebo psacím stroji by to ve skutečnosti posunulo papír o jeden řádek nahoru.
Vždy \r
znamená znak ASCII CARRIAGE-RETURN (CR), jehož jméno ve skutečnosti pochází z mechanických psacích strojů, kde byl klíč pro návrat vozíku, který způsobil, že se válec ("vozík"), který nesl papír, pohyboval doprava, poháněný pružinou, jako tak daleko, jak by to šlo. Tím nastavíte aktuální pozici psaní na levý okraj.
Programování
V některých programovacích jazycích \n
může znamenat platformu závislou sekvenci znaků, které končí nebo oddělují řádky v textovém souboru. Například v Perlu print "\n"
vytváří na Linuxu jinou sekvenci znaků než na Windows.
V Javě je nejlepší praxe, pokud chcete používat nativní zakončení řádků pro běhovou platformu, nepoužívat \n
nebo \r
vůbec. Měli byste použít System.getProperty("line.separator")
. Měli byste použít \n
a \r
kde chcete LF a CR bez ohledu na platformu (např. jak se používá v HTTP, FTP a dalších internetových komunikačních protokolech).
Unix stty
V unixovém shellu stty
příkaz lze použít k tomu, aby shell překládal mezi těmito různými konvencemi. Například stty -onlcr
způsobí, že shell následně přeloží všechny odchozí LF na CR LF.
Linux a OSX dodržují unixové konvence
Textové soubory
Textové soubory jsou stále nesmírně důležité a široce používané. Například HTML a XML jsou příklady textového souboru. Většina důležitých internetových protokolů, jako je HTTP, dodržuje konvence textových souborů a obsahuje specifikace pro zakončení řádků.
Tiskárny
Většina tiskáren kromě těch úplně nejlevnějších stále respektuje CR a LF. Ve skutečnosti jsou základem nejrozšířenějších jazyků pro popis stránek - PCL a Postscript.
Zkrátka to bylo potřeba pro tiskárny, ale teď to OS dělají trochu jinak. Ve většině případů je v pořádku provést CR i LF pomocí \r\n
a ve většině případů to bude fungovat dobře.