Windows가 CR LF를 사용하는 이유는 무엇입니까?


85

나는 둘의 차이점을 이해하므로 그것에 대해 갈 필요가 없지만 Windows가 CR과 LF를 모두 사용하여 줄 바꿈을 나타내는 이유가 무엇인지 궁금합니다. Linux 방법 (LF 사용)이 훨씬 더 합리적이고 공간을 절약하며 구문 분석이 더 쉬운 것 같습니다.




여기에 줄 바꿈의 역사에 위키 피 디아는 다음과 같습니다 en.wikipedia.org/wiki/Newline#History
Szocske

Windows의 CRLF는 대부분 규칙 / 기본값에 불과하다는 점에 주목할 가치가 있습니다. 대부분의 프로그램은 둘 중 하나를 지원합니다 (설정을 엉망으로 만들어야 할 수도 있음). 저는 개인적으로 CRLF를 거의 사용하지 않고 대신 UNIX 스타일 LF를 선택했습니다. 단지 소수의 프로그램 만이 LF만을 사용하는 파일에 여전히 문제가 있습니다.
케빈

CR + LF는이를 수행하는 올바른 방법입니다 ( 표준 ). 따라서 질문은 Windows가 올바르게 수행하는 이유가 아니라 Mac 및 Unix / Linux가이를 잘못 수행하는 이유입니다. 독립형 LF의 유산은 게으름과 지름길입니다. 나는 항상 CR + LF를 제외하고는 CR + LF를 사용하는 특정 리눅스를 제외하고는 LF 모드로 변경합니다. IMO, CR + LF를 잘못 해석하는 것은 독립형 LF를 잘못 해석하는 것보다 훨씬 더 나쁩니다.
InterLinked

답변:


96

역사적으로 사용할 때 도트 매트릭스 프린터 teletypes CR은 캐리지를 줄의 첫 번째 위치로 되돌리고 LF는 다음 줄로 공급합니다. 파일 자체에 CR + LF를 사용하면 어떤 종류의 프린터 드라이버 없이도 파일을 프린터로 직접 보낼 수 있습니다.

감사합니다 @zaph는 도트 매트릭스 프린터가 아닌 텔레타이프라고 지적했습니다.


46
아주 작은 이익을 위해 매우 일반적인 성가심.
Dávid Horváth

7
@Anders 사실 그 이유는 텔레타이프 였고, CR은 프린트 헤드를 왼쪽으로 되 돌렸고 LF는 종이를 앞당겼습니다. 텔레타이프는 도트 매트릭스 프린터보다 우선했습니다.
zaph

5
@zaph 이것이 내가 Stack Overflow를 좋아하는 이유입니다. 2 년 후 저는 교정을 받고 새로운 것을 배웠습니다.
Anders Abel

30

@sshannin이 Raymond Chen의 블로그에서 URL을 게시했지만 더 이상 작동하지 않습니다. 블로그가 내부 소프트웨어를 변경했기 때문에 URL이 변경되었습니다.

새 블로그의 이전 게시물을 크롤링 한 후 여기 에서 찾았습니다 .

블로그에서 인용 :

라인 터미네이터가 CR + LF 인 이유는 무엇입니까?

이 프로토콜은 텔레 타이프라이터 시대로 거슬러 올라갑니다. CR은 "캐리지 리턴"을 의미합니다. CR 제어 문자는 용지를 전진하지 않고 0 열로 프린트 헤드 ( "캐리지")를 반환했습니다. LF는 "linefeed"를 의미합니다. LF 제어 문자는 프린트 헤드를 움직이지 않고 용지를 한 줄 앞으로 이동합니다. 따라서 프린트 헤드를 열 0으로 되돌리고 (다음 행을 인쇄 할 준비가 됨) 용지를 진행하려면 (새 용지에 인쇄되도록) CR과 LF가 모두 필요합니다.

RFC 0821 (SMTP), RFC 1939 (POP), RFC 2060 (IMAP) 또는 RFC 2616 (HTTP)과 같은 다양한 인터넷 프로토콜 문서로 이동하면 모두 CR + LF를 라인 종료 순서. 그래서 진짜 질문은 "왜 CP / M, MS-DOS, Win32는 라인 종결 자로 CR + LF를 사용합니까?"가 아닙니다. 오히려 "왜 다른 사람들이 이러한 표준 문서와 다른 라인 터미네이터를 사용하기로 선택 했습니까?"

Unix는 라인 종료 시퀀스로 일반 LF를 채택했습니다. stty 옵션을 살펴보면 onlcr 옵션이 LF를 CR + LF로 변경해야하는지 여부를 지정한다는 것을 알 수 있습니다. 이 설정이 잘못되면 계단 텍스트가 표시됩니다.

each
    line
        begins 

이전 줄이 중단 된 곳. 따라서 유닉스에서도 원시 모드로두면 행을 종료하려면 CR + LF가 필요합니다. LF 이전의 암시 적 CR은 한 줄에 1 바이트를 절약하기 때문에 아마도 경제적 인 유닉스 발명품입니다.

C 언어의 유닉스 조상은이 규칙을 C 언어 표준으로 전달했습니다. C 언어 표준에는 "\ n"(LF 인코딩) 만 있으면 행을 종료하므로 원시 파일 데이터를 논리 행으로 변환하는 런타임 라이브러리의 부담이됩니다.

C 언어는 또한 "일반 줄 종결 자"의 개념을 표현하기 위해 "개행"이라는 용어를 도입했습니다. 아스키위원회가 1996 년경에 0x0A 문자의 이름을 "newline"으로 변경했다고 들었 기 때문에 혼란 수준이 더욱 높아졌습니다.

다음은 유닉스 관점에서 주제에 대한 또 다른 논의입니다.

실제 페이지를 더 이상 사용할 수 없기 때문에이 두 번째 링크를 The Wayback Machine의 스냅 샷으로 변경했습니다.

귀하의 질문에 대한 답변이 되었기를 바랍니다.


당신이 정말로에서, 단지 오래된되고있다 링크를 수정, 질문에 대답하지 않기 때문에 의견 이 정말 코멘트 수 있어야합니다. 어쨌든 올바른 링크에 감사드립니다. 댓글로 추가해주세요.이 답변은 삭제 될 수 있습니다.
Tom Brunberg

1
좋아, 여기에 블로그의 텍스트를 추가 했으므로 링크가 다시 잘못되면 여기에서 텍스트를 계속 사용할 수 있습니다. 이 정보는 실제로 원래 질문에 대한 답변이기 때문에 단순히 댓글이 아닌 답변으로 유지되어야한다고 생각합니다.
OMA

7
나는 정말 마이크로 소프트는 정기적으로 자신의 링크를 쓸모 없게하는 방식을 싫어.
Mark Ransom

1
이 답변은 제외 된 답변보다 더 자세하며 질문뿐만 아니라 질문에 대한 추측 된 이유에 대한 답변을 제공합니다. IMHO가 좋습니다.
Alexei Martianov

18

그것은 옛날부터 텔레타이프 기계 (그리고 타자기)에서 나온 것입니다.

예전에는 줄을 다 입력했을 때 타자기의 마차 (종이를 잡고 입력 할 때 왼쪽으로 미끄러짐)를 줄의 시작 부분 (CR)으로 다시 이동해야했습니다. 그런 다음 다음 줄로 이동하려면 용지를 한 줄 아래로 (LF) 진행해야했습니다.

대시로 문자를 취소하려는 경우 (덮어 쓰기 만하면 됨)와 같이 캐리지 반환시 줄 바꿈을 원하지 않을 수 있습니다.

그러나 기본적으로 관습으로 귀결됩니다. DOS는 전체 CR / LF 규칙을 사용했고 UNIX는이를 약간 단축했습니다. 이제 우리는 붙어 있습니다!


2

다른 사람들이 대답을했지만 추가하고 싶었습니다. 타자기를 사용하기에는 너무 어려 요? ;) 캐리지는 드럼입니다. 수평으로 오른쪽으로 이동하면 고정 유형 헤드가 페이지의 왼쪽 여백으로 돌아갑니다. 손가락과 엄지 손가락을 사용하여 캐리지를 회전하면 페이지가 한 줄씩 진행됩니다.


2
타이프라이터? 나는 :) 한 번 박물관에서 그 중 하나를 본 것 같아요
카일

@Kyle 나는 웃음을했고이 내 일을 :) 밝아
likejudo

1

에서 위키 백과 :

CR + LF 시퀀스는 텔레타이프 머신 (일반적으로 ASR33)을 콘솔 장치로 채택한 많은 초기 컴퓨터 시스템에서 일반적으로 사용되었습니다.이 시퀀스는 새 라인의 시작 부분에 해당 프린터를 배치하는 데 필요했기 때문입니다.


1

데이터 전송 속도를 실제 인쇄 속도와 더 잘 일치시키기 위해 하나 대신 두 문자 (때로는 더 많이)를 보내는 이유가 두 개 이상의 계정을 보았습니다 ( 이는 오래 전이었습니다 ). 프린트 헤드 이동은 단일 문자를 인쇄하는 것보다 오래 걸렸으며 추가 문자를 보내는 것은 데이터 전송이 인쇄 장치보다 앞서는 것을 방지하는 방법이었습니다. 따라서 Windows에서 줄 끝 문자가 여러 개있는 이유는 기본적으로 QWERTY 키보드를 사용하는 이유와 동일 합니다 .

분명히이 방식이 Windows에서 오늘날까지 계속되는 이유는 지속적인 이전 버전과의 호환성과 궁극적으로는 단순한 관성에 근거한 것입니다.

그러나이 규칙은 Windows가 운영 체제 수준에서 엄격하게 적용하는 것은 아닙니다 . 모든 Windows 응용 프로그램은 호환되는 다른 응용 프로그램에 따라 규칙을 무시할 수 있습니다.

흥미롭게도 "Newline"에 대한 Wikipedia 기사에서는 Windows 8에서 LF 만 사용하는 변경 사항을 도입 할 수 있다고 주장합니다. 이 기사는 또한 Mac OS X에서 LF + CR에서 LF 로의 전환을 도입했다고 설명합니다.


4
"속도를 늦추려는 의도"-인용이 필요합니다.
Elliot Gorokhovsky

4
실제로 첫 번째 단락 전체-인용이 필요했습니다.
Elliot Gorokhovsky

2
다음은 동일한 Wikipedia 콘텐츠를 참조하는 밀접하게 관련된 Jeff Atwood 기사입니다 : The Great Newline Schism . 여기에는 운영 체제 수준의 문제가 아니며 대부분의 Windows 앱이 LF 전용 텍스트 파일에서 잘 작동한다는 내 주장을 일부 입증하는 등 지능적인 사용자 의견도 많이 있습니다. 재미있는 코멘트도 있습니다. "Windows 10은 CR / LF를 사용하여 1963 Model 33 텔레타이프 머신 과의 호환성을 유지 합니다."
Brent Bradburn 2015 년

1
@ RenéG 나는 인용이 필요하지 않고 거기에 있었고 직접 봤습니다. 일부 초기 도트 매트릭스 프린터는 좋은 측정을 위해 몇 개의 추가 NUL을 필요로했습니다. 왜냐하면 인터페이스의 전송 속도가 증가함에 따라 헤드가 두 문자의 시간 가치를 따라갈 수 없었기 때문입니다. 버퍼링과 흐름 제어가 등장하면서이 문제는 사라졌지 만 초기 프린터에는 그렇지 않았습니다. 마지막으로 프린터가 출력 전용이되면서 핸드 셰이 킹이 내장 된 병렬 인터페이스로 이동했습니다.
Mark Ransom

1
"일반적인 믿음과는 달리 QWERTY 레이아웃은 타이피스트의 속도를 늦추도록 설계되지 않았습니다 .…"– Properties | QWERTY - 위키 백과
제이슨 스팍
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.