Gostaria de saber a diferença (com exemplos, se possível) entre os tipos de quebra de linha CR LF (Windows), LF (Unix) e CR (Macintosh).
line-breaks
eozzy
fonte
fonte
\n
normalmente é representado por um avanço de linha, mas não é necessariamente um avanço de linha.\r
e\n
são abstrações utilizadas em determinadas linguagens de programação. Fechar esta pergunta encobre as diferenças fundamentais entre as perguntas e perpetua a desinformação.\n
não significa a mesma coisa em todas as linguagens de programação.Respostas:
É realmente apenas sobre quais bytes são armazenados em um arquivo.
CR
é um bytecode para retorno de carro (a partir dos dias das máquinas de escrever) e daLF
mesma forma, para avanço de linha. Apenas se refere aos bytes que são colocados como marcadores de fim de linha.Muito mais informações, como sempre, na wikipedia .
fonte
CR
é o caractere de escape\r
eLF
é o caractere de escape\n
. Além disso, Wikipedia: Newline .CR and LF
é apenas o fim da linha e a nova linha de acordo com este link , isso está correto?CR e LF são caracteres de controle, respectivamente codificados
0x0D
(13 decimais) e0x0A
(10 decimais).Eles são usados para marcar uma quebra de linha em um arquivo de texto. Como você indicou, o Windows usa dois caracteres na sequência CR LF; O Unix usa apenas LF e o MacOS antigo (MacIntosh anterior ao OSX) usava CR.
Uma perspectiva histórica apócrifa:
Conforme indicado por Peter , CR = retorno de carro e LF = avanço de linha , duas expressões têm suas raízes nas máquinas de escrever antigas / TTY. LF moveu o papel para cima (mas manteve a posição horizontal idêntica) e CR trouxe de volta o "carro" para que o próximo caractere digitado ficasse na posição mais à esquerda no papel (mas na mesma linha). CR + LF estava fazendo as duas coisas, ou seja, preparando-se para digitar uma nova linha. Com o passar do tempo, a semântica física dos códigos não se aplicava, e como a memória e o espaço em disco eram escassos, alguns designers de sistemas operacionais decidiram usar apenas um dos personagens, mas não se comunicaram muito bem; -)
A maioria dos editores de texto modernos e aplicativos orientados a texto oferecem opções / configurações etc. que permitem a detecção automática da convenção de fim de linha do arquivo e a exibição em conformidade.
fonte
CR and LF
é apenas o fim da linha e a nova linha de acordo com este link , isso está correto?CR+LF
) podem ser exibidos com novas linhas duplas em outros sistemas. Presumivelmente, o editor que exibe o texto oferece suporte ao retorno de carro e ao avanço de linha como delimitadores de nova linha e, como tal, pode criar 2 linhas onde 1 foi planejado. Portanto, emboraCR+LF
possa ser o mais compatível, acho que não há problemas.Este é um bom resumo que encontrei:
O caractere de retorno de carro (CR) (
0x0D
,\r
) move o cursor para o início da linha sem avançar para a próxima linha. Esse caractere é usado como um novo caractere de linha nos sistemas operacionais Commodore e Early Macintosh (OS-9 e versões anteriores).O caractere Line Feed (LF) (
0x0A
,\n
) move o cursor para baixo até a próxima linha sem retornar ao início da linha. Esse caractere é usado como um novo caractere de linha em sistemas baseados em UNIX (Linux, Mac OSX, etc)A sequência de fim de linha (EOL) (
0x0D 0x0A
,\r\n
) é na verdade dois caracteres ASCII, uma combinação dos caracteres CR e LF. Move o cursor para baixo até a próxima linha e o início dessa linha. Esse caractere é usado como um caractere de nova linha na maioria dos outros sistemas operacionais não Unix, incluindo Microsoft Windows, Symbian OS e outros.Fonte
fonte
Como não há resposta afirmando exatamente isso, resumimos sucintamente:
Retorno de carro (MAC pré-OSX)
Alimentação de linha (Linux, MAC OSX)
Retorno de carro e avanço de linha (Windows)
Se você vir código ASCII em um formato estranho, eles são apenas o número 13 e 10 em uma base / raiz diferente, geralmente a base 8 (octal) ou a base 16 (hexadecimal).
http://www.bluesock.org/~willg/dev/ascii.html
fonte
Jeff Atwood publicou recentemente um post no blog: The Great Newline Schism
Aqui está a essência da Wikipedia :
fonte
<CR><CR><LF>
- então é claro que experimentei apenas uma<CR>
. Enviei<CR><LF>A
depois de uma longa fila e você podia ouvir o queA
estava sendo impresso antes que a carruagem retornasse completamente.<CR><CR>
e digitando o número correto de espaços e reimprimindo a mesma palavra: uma forma primitiva de negrito.CR - código ASCII 13
Código LF - ASCII 10.
Teoricamente, CR retorna o cursor para a primeira posição (à esquerda). LF alimenta uma linha movendo o cursor uma linha para baixo. É assim que antigamente você controlava impressoras e monitores em modo de texto. Esses caracteres geralmente são usados para marcar o final das linhas em arquivos de texto. Sistemas operacionais diferentes usavam convenções diferentes. Como você apontou, o Windows usa a combinação CR / LF, enquanto os Macs pré-OSX usam apenas CR e assim por diante.
fonte
Aqui estão os detalhes .
fonte
O triste estado de "separadores de registros" ou "terminadores de linha" é um legado da idade das trevas da computação.
Agora, assumimos que tudo o que queremos representar é, de alguma forma, dados estruturados e está em conformidade com várias abstrações que definem linhas, arquivos, protocolos, mensagens, marcações, o que for.
Mas uma vez isso não era exatamente verdade. Caracteres de controle integrados dos aplicativos e processamento específico do dispositivo. Os sistemas de morte encefálica que exigiam CR e LF simplesmente não tinham abstração para separadores de registros ou terminadores de linha. O CR era necessário para que o teletipo ou a exibição de vídeo retornasse à coluna um e o LF (hoje, NL, mesmo código) era necessário para que ele avançasse para a próxima linha. Eu acho que a ideia de fazer algo diferente de descarregar os dados brutos no dispositivo era muito complexa.
Unix e Mac, na verdade, especificaram uma abstração para o final da linha, imagine isso. Infelizmente, eles especificaram diferentes. (Unix, ahem, veio primeiro.) E, naturalmente, eles usaram um código de controle que já estava "próximo" ao SOP
Como quase todo o nosso software operacional hoje é descendente do SW operacional do Unix, Mac ou MS, estamos presos à confusão de final de linha.
fonte
NL derivado de EBCDIC NL = x'15 ', que seria comparado logicamente com CRLF x'odoa ascii ... isso se torna evidente quando os dados são movidos fisicamente dos mainframes para os médios. Coloquialmente (como apenas pessoas arcanas usam ebcdic) NL foi equiparado a CR ou LF ou CRLF
fonte