Como são tratados \ n e \ n de forma diferente no Linux e no Windows?

17

Acho que \n move a agulha para baixo e \r move a agulha para o início de uma linha (alinhamento à esquerda)? Não tenho certeza, no entanto. Então, se eu estiver errado, por favor corrija-me ....

De qualquer forma, foi-me dito que o Windows e o Linux tratam newlines e carriage returns de forma diferente. Eu gostaria de saber como eles lidam com eles de forma diferente e em alguns lugares onde é importante lembrar. Obrigado por responder.

    
por 千里ちゃん 03.01.2012 / 07:45

3 respostas

16

I think \n moves the needle down, and \r moves the needle to the beginning of a line (left align)? I'm not sure, though

Isso é verdade, mais ou menos, mas principalmente uma curiosidade histórica. Originalmente, o avanço de linha (LF) era usado para avançar o trabalho por uma linha em impressoras e terminais de impressão ( teleprinters ); retorno de carro (CR) retornou a cabeça de impressão para o início da linha.

Isso provavelmente ainda funciona em impressoras modernas quando usado em "modo de texto", mas é pouco relevante hoje em dia.

Anyway, I was told that Windows and Linux handle newlines and carriage returns differently.

A diferença é simplesmente: os projetistas de SO devem escolher como representar o início de uma nova linha no texto em arquivos de computador. Por várias razões históricas, no mundo Unix / Linux, um único caractere LF foi escolhido como marcador de nova linha; O MS-DOS escolheu CR + LF e o Windows herdou isso. Assim, diferentes plataformas usam diferentes convenções.

Na prática, isso está se tornando cada vez menos um problema. O marcador de nova linha é realmente relevante somente para programas que processam "texto simples", e não são muitos - ele afeta principalmente o código fonte do programa, arquivos de configuração e alguns arquivos de texto simples com documentação. Atualmente, a maioria dos programas que manipulam esses tipos de arquivos (editores, compiladores, etc.) podem manipular ambas as convenções de nova linha, portanto, não importa qual você escolher.

Existem alguns casos em que as ferramentas insistem na "nova" convenção de nova linha (por exemplo, os shell scripts do Unix não devem usar CR + LF), caso em que você deve usar o caminho certo.

    
por 03.01.2012 / 09:11
11

CR e LF

O ASCII (American Standard Code for Information Interchange) definiu caracteres de controle, incluindo CARRIE-RETURN (CR) e LINE-FEED (LF) que eram (e ainda são) usados para controlar a posição de impressão em impressoras de uma maneira análogo às máquinas de escrever mecânicas que precederam as primeiras impressoras de computador.

Dependência de plataforma

No Windows, o tradicional separador de linhas em arquivos de texto é CR seguido por LF

Em sistemas Apple Macintosh anteriores (pré OSX), o separador de linha tradicional em arquivos de texto era CR

No Unix e no Linux, o tradicional separador de linhas em arquivos de texto é o LF.

\ n e \ r

Em muitas linguagens de programação e script \n significa "nova linha". Às vezes (mas nem sempre) isso significa o caractere ASCII LINE-FEED (ALF), que, como você diz, move o cursor (ou a posição de impressão) para baixo de uma linha. Em uma impressora ou máquina de escrever, isso realmente moveria o papel uma única linha.

Invariavelmente, \r significa o caractere ASCII CARRO-RETORNO (CR) cujo nome realmente vem de máquinas de escrever mecânicas onde havia uma chave de retorno do carro que fazia o rolo ("carruagem") transportar o papel para a direita , alimentado por uma mola, tanto quanto iria. Assim, definindo a posição de digitação atual para a margem esquerda.

Programação

Em algumas linguagens de programação \n pode significar uma sequência de caracteres dependente de plataforma que finaliza ou separa linhas em um arquivo de texto. Por exemplo, em Perl, print "\n" produz uma sequência diferente de caracteres no Linux do que no Windows.

Em Java, a melhor prática, se você quiser usar os terminais de linha nativos para a plataforma de tempo de execução, não é usar \n ou \r . Você deve usar System.getProperty("line.separator") . Você deve usar \n e \r onde quiser LF e CR, independentemente da plataforma (por exemplo, como usado em HTTP, FTP e outros protocolos de comunicação da Internet).

Unix stty

Em um shell Unix, o comando stty pode ser usado para fazer com que o shell traduza entre essas várias convenções. Por exemplo, stty -onlcr fará com que o shell traduza subseqüentemente todos os LFs de saída para CR LF.

Linux e OSX seguem as convenções do Unix

Arquivos de texto

Os arquivos de texto ainda são extremamente importantes e amplamente utilizados. Por exemplo, HTML e XML são exemplos de arquivos de texto. A maioria dos protocolos importantes da Internet, como HTTP, segue as convenções de arquivo de texto e inclui especificações para fins de linha.

Impressoras

A maioria das impressoras, exceto as mais baratas, ainda respeita CR e LF. Na verdade, eles são fundamentais para as linguagens de descrição de páginas mais usadas - PCL e Postscript.

    
por 03.01.2012 / 10:10
3

Em suma, era necessário para impressoras, mas agora os sistemas operacionais fazem isso de maneira ligeiramente diferente. Na maioria dos casos, é bom fazer apenas CR e LF fazendo \r\n e, na maioria dos casos, isso funcionará bem.

    
por 03.01.2012 / 09:14