Sim, sim, estou ciente de que '\n'
escreve uma nova linha em UNIX, enquanto para o Windows não é a seqüência de dois caracteres: '\r\n'
. Tudo isso é muito bom em teoria, mas minha pergunta é por quê ? Por que o caractere de retorno de carro é extra no Windows? Se o UNIX pode fazer isso, \n
por que o Windows leva dois caracteres para fazer isso?
Estou lendo o livro Python de David Beazley e ele diz:
Por exemplo, no Windows, escrever o caractere '\ n' na verdade gera a sequência de dois caracteres '\ r \ n' (e ao ler o arquivo novamente, '\ r \ n' é convertido novamente em um único '\ n' personagem).
Por que o esforço extra?
Eu serei honesto. Eu conheço a diferença há muito tempo, mas nunca me preocupei em perguntar por que. Espero que isso seja respondido hoje.
Obrigado pelo seu tempo.
fonte
\r\n
. Também é usado pela maioria dos protocolos da Internet baseados em texto (por exemplo, SMTP, HTTP, etc.) pelo mesmo motivo que o Windows (por exemplo, histórico).System.out.printf()
ouString.format()
), certifique-se de usar%n
como seu CRLF para fins de compatibilidade com o SO.\n
está obsoleto.\n\r
várias vezes. (Eu acho que foi algo de NetWare.)Respostas:
Compatibilidade com versões anteriores.
O Windows é compatível com versões anteriores do MS-DOS (agressivamente, até mesmo) e o MS-DOS usou a convenção CR-LF porque o MS-DOS era compatível com o CP / M-80 (um tanto por acidente) que usou a convenção CR-LF porque Foi assim que você dirigiu uma impressora (porque as impressoras eram originalmente máquinas de escrever controladas por computador).
As impressoras têm um comando separado para mover o papel uma linha para uma nova linha e um comando separado para retornar o carro (onde o papel foi montado) de volta à margem esquerda.
É por isso. E, sim, é um aborrecimento, mas faz parte do acordo que permitiu ao MS-DOS conquistar o CP / M e o Windows 95 conquistar todas as outras GUIs do DOS e o Windows XP assumir o controle. do Windows 98.
(Nota: As impressoras a laser modernas ainda possuem esses comandos porque também são compatíveis com as impressoras anteriores - a HP, em particular, faz isso bem)
Para aqueles que não estão familiarizados com as máquinas de escrever, aqui está um vídeo mostrando como a digitação foi feita: http://www.youtube.com/watch?v=LJvGiU_UyEQ . Observe que o papel é movido primeiro para cima e, em seguida, o carro é devolvido, mesmo que isso aconteça em um movimento simples. O ding notificou o datilógrafo que o fim estava próximo e se preparava para isso.
fonte
Tanto quanto sei, isso remonta aos dias das máquinas de escrever.
\r
é o retorno de carro, que é o que move o local onde você está digitando na página de volta para a esquerda (ou para a direita, se essa é sua cultura)\n
é uma nova linha, que move seu papel uma linha.Fazer apenas um desses em uma máquina de escrever o colocaria no lugar errado para começar a escrever uma nova linha de texto.
Quando os computadores surgiram, acho que algumas pessoas mantiveram o modelo antigo, mas outras perceberam que não era necessário e encapsularam uma nova linha completa como um personagem.
fonte
Não sei se isso é de conhecimento comum, mas deve-se notar que o CR ainda é entendido pelos modernos emuladores de terminal:
É útil para indicadores de progresso, por exemplo
fonte
Historicamente, o avanço de linha significava que o cilindro - o rolo no qual você digita - girava uma linha, fazendo com que o texto apareça na próxima linha ... mas na próxima coluna.
Retorno de carro significa "retornar o bit com o qual você digita no início da linha".
O Windows usa CR + LF porque o MS-DOS fez, porque o CP / M fez, porque fazia sentido para linhas seriais.
O Unix copiou sua \ n convenção porque Multics o fez.
Suspeito que, se você voltar o suficiente, encontrará um desacordo político entre os implementadores!
(Você deixou de lado a parte divertida, onde a convenção do Mac é (ou costumava ser) usar apenas o CR para separar linhas. E agora o Unicode também tem seu próprio separador de linhas, U + 2028!)
fonte
História do personagem da nova linha (Wikipedia):
fonte
O que há com as pessoas perguntando "por que o Unix pode fazer
\n
e não o Windows"? É uma pergunta tão estranha.\n
e\r\n
muito bem. Eles também produzem\r\n
para que todos fiquem felizes. Um programa não simplesmente "faz" um\n
ou outro\r\n
- ele aceita um, o outro ou ambos, e gera um, o outro ou ambos.\n
vez do correto\r\n
.\n
sabendo que existem alguns protocolos e programas que não gostam?fonte
A razão pela qual as convenções mantêm seus vários sistemas (\ n em sistemas do tipo unix, \ r \ n no Windows, etc) é que, depois de escolher uma convenção, você NÃO pode alterá-la sem quebrar um monte de arquivos das pessoas. E isso geralmente é desaprovado.
Os sistemas do tipo Unix foram desenvolvidos (muito cedo) usando vários modelos de teletipo e, em algum momento, alguém decidiu que o equipamento deveria retornar o carro quando fazia um avanço de linha.
O Windows veio do DOS; portanto, para o Windows, a pergunta realmente é: Por que o DOS usou essa sequência cr / lf? Acho que tem algo a ver com o CP / M, onde o DOS tem algumas raízes. Novamente, modelos específicos de teletipo podem ter desempenhado um papel.
fonte
\n
, mas continua a usar\r\n
por enquanto? Se eles fizessem isso a partir do Windows XP, agora poderiam começar a salvar arquivos em\n
vez de\r\n
.Aqui está uma resposta da melhor fonte - Microsoft. Por que o terminador de linha CR + LF?
fonte