Eu acho que \n
move a agulha para baixo e \r
move a agulha para o início de uma linha (alinhar à esquerda)? Eu não tenho certeza, no entanto. Então, se eu estiver errado, por favor me corrija ....
De qualquer forma, me foi dito que o Windows e Linux punho newlines
e carriage returns
diferente. Gostaria de saber como eles lidam com eles de maneira diferente e em alguns lugares onde é importante lembrar. Obrigado por responder.
linux
windows
newlines
carriage-return
千里 ち ゃ
fonte
fonte
\r\n
está tudo bem no Windows, mas\n\r
não está, e me lembro disso porque\r\n
é um acrônimo para enfermeira registrada. Também ouvi dizer que\n
é isso que as pessoas usam no Linux e\r
não são usadas sozinhas para o mesmo propósito que\r\n
.\r
é usado no MacOS realmente antigo. Eu não verifiquei esses fatos, no entanto.\r
e\n
, como o\n
tratamento é feito depende de onde você o está usando. Melhor chamá-losCR
eLF
.Respostas:
Isso é verdade, mais ou menos, mas principalmente uma curiosidade histórica. Originalmente, o avanço de linha (LF) era usado para avançar o papel por uma linha em impressoras e terminais de cópia impressa ( tele- impressoras ); retorno de carro (CR) retornou a cabeça de impressão para o início da linha.
Provavelmente isso ainda funciona em impressoras modernas quando usado no "modo de texto", mas é pouco relevante hoje em dia.
A diferença é simples: os designers de sistemas operacionais tiveram que 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, plataformas diferentes usam convenções diferentes.
Na prática, isso está se tornando cada vez menos um problema. O marcador de nova linha é realmente relevante apenas para os pogramas que processam "texto sem formatação", e não há muitos - afeta principalmente o código-fonte do programa, os arquivos de configuração e alguns arquivos de texto simples com documentação. Atualmente, a maioria dos programas que lidam com esse tipo de arquivo (editores, compiladores, etc.) pode lidar com ambas as convenções de nova linha, portanto, não importa qual você escolher.
Existem alguns casos em que as ferramentas insistem na convenção de nova linha "deles" (por exemplo, os scripts de shell do Unix não devem usar CR + LF); nesse caso, você deve usar o correto.
fonte
\n\r
e\n
são iguais? Por exemplo, se eu estivesse analisando um arquivo de texto que foi editado no PC de outra pessoa e continha a versão das quebras de linha do Linux e do Windows, executar umpreg_match
for\n
e\n\r
me fornecer resultados diferentes?CR e LF
O Código Padrão Americano para Intercâmbio de Informações (ASCII) definiu caracteres de controle, incluindo CARRIAGE-RETURN (CR) e LINE-FEED (LF) que foram (e ainda são) utilizados para controlar a posição de impressão nas impressoras de maneira análoga à máquinas de escrever mecânicas que precederam as primeiras impressoras de computador.
Dependência de plataforma
No Windows, o separador de linhas tradicional em arquivos de texto é CR seguido por LF
Nos sistemas Apple Macintosh antigos (pré-OSX), o separador de linha tradicional em arquivos de texto era CR
No Unix e Linux, o separador de linhas tradicional em arquivos de texto é 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 (LF), que, como você diz, move o cursor (ou posição de impressão) uma linha. Em uma impressora ou máquina de escrever, isso realmente moveria o papel uma linha acima.Invariavelmente,
\r
significa o caractere ASCII DE RETORNO DE CARRO (CR), cujo nome realmente vem de máquinas de escrever mecânicas, onde havia uma chave de retorno de carro que fazia com que o rolo ("carro") que carregava o papel se movesse para a direita, movido por uma mola, na medida do possível. Definindo assim a posição atual de digitação na margem esquerda.Programação
Em algumas linguagens de programação,
\n
pode significar uma sequência de caracteres dependente da plataforma que termina ou separa linhas em um arquivo de texto. Por exemplo, no Perl,print "\n"
produz uma sequência de caracteres diferente no Linux e no Windows.Em Java, a melhor prática, se você quiser usar os fins de linha nativos para a plataforma de tempo de execução, não é para uso
\n
ou\r
em tudo. Você deveria usarSystem.getProperty("line.separator")
. Você deve usar\n
e\r
onde deseja 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
stty
comando pode ser usado para fazer com que o shell seja convertido entre essas várias convenções. Por exemplo,stty -onlcr
fará com que o shell traduza posteriormente todos os LFs de saída para CR LF.Linux e OSX seguem convenções 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 arquivo de texto. A maioria dos protocolos importantes da Internet, como HTTP, segue convenções de arquivos de texto e inclui especificações para terminações de linha.
Impressoras
A maioria das impressoras, além das mais baratas, ainda respeita a CR e a LF. De fato, são fundamentais para as linguagens de descrição de página mais usadas - PCL e Postscript.
fonte
line.separator
. Realmente depende do que você quer.println()
usa automaticamenteline.separator
; portanto, se você quiser finais de linha nativos, poderá usarprintln()
(e se precisar de um determinado tipo específico de final de linha, não o use, mas use "\ n" etc. explicitamente).\n
existe um caractere de controle que não seja o ASCII LF (que não seja o sistema EBCDIC)? Estou me referindo ao que\n
significa uma literal de seqüência de caracteres ou caracteres, e não ao efeito de enviá-lo para um arquivo ou dispositivo de saída.\n
sempre é o código 10 ASCII (e Unicode), porque o JLS diz isso explicitamente (JLS 3.10.6, "Sequências de escape para caracteres e literais de cadeias" - verifiquei :-)). Para outras línguas - boa pergunta.Em resumo, era necessário para impressoras, mas agora os sistemas operacionais fazem isso de maneira um pouco diferente. Na maioria dos casos, não há problema em apenas fazer CR e LF fazendo
\r\n
e, na maioria dos casos, isso funcionará bem.fonte
\r
ou causa algum tipo de mudança de comportamento?