CR LF, LF 및 CR 줄 바꿈 유형의 차이점은 무엇입니까?


758

CR LF (Windows), LF (Unix) 및 CR (Macintosh) 줄 바꿈 유형의 차이점 (가능한 경우 예제 포함)을 알고 싶습니다.


9
매우 유사하지만 정확한 복제본은 아닙니다 . \n일반적으로 줄 바꿈으로 표시되지만 반드시 줄 바꿈 일 필요는 없습니다.
Adrian McCarthy

92
CR 및 LF는 ASCII와 동안 유니 코드 제어 문자입니다 \r\n특정 프로그래밍 언어에 사용되는 추상화입니다. 이 질문을 닫으면 질문 사이의 근본적인 차이점에 대해 글을 쓰고 잘못된 정보를 영속시킵니다.
Adrian McCarthy

5
@AdrianMcCarthy 투표가 어떤 식 으로든 답변으로 작용하는 방식에 문제가 있습니다. 두 사람이 동일하다고 주장하는 답변은 다운 보트 될 수 있고 매우 회색으로 회색으로 표시 될 수 있지만 매우 동의하지 않은 투표를하기 위해 4 개의 동의 투표 (공표와 비교) 만 있으면됩니다. 일어난 일이야
Jon Hanna

이 질문의 공식화는 물론 더 나은 것이지만, 여전히 모든 실제적인 목적을 위해 동일한 질문입니다.
Jukka K. Korpela

6
@JukkaK. Korpela : 아뇨, 그렇지 않습니다. \n모든 프로그래밍 언어에서 같은 의미는 아닙니다.
Adrian McCarthy

답변:


348

실제로 파일에 어떤 바이트가 저장되어 있는지입니다. CR타자기부터 캐리지 리턴 및 LF줄 바꿈에 대한 바이트 코드입니다 . 행 끝 마커로 배치 된 바이트 만 참조합니다.

항상 wikipedia 에 대한 추가 정보 .


52
나는 그 언급하는 것이 유용하다고 생각 CR이스케이프 문자 \rLF이스케이프 문자입니다 \n. 또한 Wikipedia : Newline 입니다.
Robert Vunabandi

1
간단하게 말하면 CR and LF링크 에 따라 줄 끝과 줄 바꿈 이 맞습니까?
shaijut

@shaijut CR은 캐리지 리턴을 나타냅니다. 그것이 타자기의 운송을 반환 한 것이 었습니다. 따라서 대부분 정확합니다.
AliFurkan

763

CR 및 LF는 각각 제어 된 문자 0x0D이며 0x0A(10 진수 13) 10 진수입니다.

텍스트 파일에서 줄 바꿈을 표시하는 데 사용됩니다. 표시된 것처럼 Windows는 CR LF 시퀀스의 두 문자를 사용합니다. 유닉스는 LF 만 사용하고 이전 MacOS (OSX 이전 MacIntosh)는 CR을 사용했습니다.

묵시적인 역사적 관점 :

Peter , CR = Carriage Return 및 LF = Line Feed 에서 알 수 있듯이 두 식은 이전 타자기 / TTY에 근본이 있습니다. LF는 용지를 위로 옮기고 (수평 위치는 동일하게 유지) CR은 "캐리지"를 다시 가져 와서 입력 된 다음 문자가 용지의 가장 왼쪽 위치 (같은 줄에 있음)가되도록합니다. CR + LF는 두 줄 모두를 수행했습니다. 즉, 새 줄을 입력 할 준비를했습니다. 시간이 지남에 따라 코드의 물리적 의미가 적용되지 않았고 메모리 및 플로피 디스크 공간이 부족 해짐에 따라 일부 OS 디자이너는 문자 중 하나만 사용하기로 결정했지만 서로 아주 잘 통신하지 못했습니다. -)

대부분의 최신 텍스트 편집기 및 텍스트 중심 응용 프로그램은 파일의 줄 끝 규칙을 자동으로 감지하고 그에 따라 표시 할 수있는 옵션 / 설정 등을 제공합니다.


11
실제로 Windows는 이러한 문자를 올바르게 사용하는 유일한 OS, 캐리지 리턴, 줄 바꿈이 뒤 따릅니다.
Rolf

4
그렇다면 Windows에서 생성 된 텍스트 파일이이 세 가지 중에서 가장 호환되는 것, 즉 세 가지 OS 하위 세트 모두에 표시 될 가능성이 가장 높다고 말하는 것이 정확합니까?
Prometheus

3
@Hashim 제대로 표시 될 수 있지만 캐리지 리턴으로 텍스트 셸 스크립트를 실행하면 일반적으로 오류가 발생합니다.
Omer

간단하게 말하면 CR and LF링크 에 따라 줄 끝과 줄 바꿈 이 맞습니까?
shaijut

일부 Windows 스타일 파일 ( CR+LF)이 다른 시스템에서 두 줄 바꿈으로 표시 될 수 있음을 발견했습니다 . 텍스트를 표시하는 편집기는 캐리지 리턴과 줄 바꿈을 개행 구분 기호로 지원하므로, 1 줄이 의도 한 곳에 2 줄을 만들 수 있습니다. 그래서 동안 CR+LF수 있습니다 대부분의 호환, 나는 그것이 문제없이 생각하지 않습니다.
Magnus Bull

458

이것은 내가 찾은 좋은 요약입니다.

캐리지 리턴 (CR) 문자 ( 0x0D, \r)는 다음 행으로 이동하지 않고 커서를 행의 시작 부분으로 이동합니다. 이 문자는 Commodore 및 Early Macintosh 운영 체제 (OS-9 이하)에서 줄 바꿈 문자로 사용됩니다.

줄 바꿈 (LF) 문자 ( 0x0A, \n)는 줄의 시작 부분으로 돌아 가지 않고 커서를 다음 줄로 이동합니다. 이 문자는 UNIX 기반 시스템 (Linux, Mac OSX 등)에서 줄 바꾸기 문자로 사용됩니다.

EOL (End of Line) 시퀀스 ( 0x0D 0x0A, \r\n)는 실제로 두 개의 ASCII 문자이며 CR과 LF 문자의 조합입니다. 커서를 다음 줄과 그 줄의 시작 부분으로 이동시킵니다. 이 문자는 Microsoft Windows, Symbian OS 및 기타를 포함한 대부분의 다른 Unix 이외의 운영 체제에서 줄 바꾸기 문자로 사용됩니다.

출처


1
"수직 탭"문자는 커서를 아래로 이동하고 LF 문자가 아닌 행의 위치를 ​​유지합니다. LF는 EOL입니다.
12431234123412341234123

2
@TaylorLeese / r / n과 / n / r는 동일합니까?
Vicrobot

175

이것을 간단히 언급하는 대답이 없으므로 간결하게 요약하면 다음과 같습니다.

캐리지 리턴 (MAC pre-OSX)

  • CR
  • \아르 자형
  • ASCII 코드 13

줄 바꿈 (Linux, MAC OSX)

  • LF
  • \엔
  • ASCII 코드 10

캐리지 리턴 및 줄 바꿈 (Windows)

  • CRLF
  • \ r \ n
  • ASCII 코드 13 및 ASCII 코드 10

ASCII 코드가 이상한 형식으로 보이면 다른 기수 /베이스의 숫자 13과 10, 일반적으로 기수 8 (8 진수) 또는 기수 16 (16 진수)입니다.

http://www.bluesock.org/~willg/dev/ascii.html


46

Jeff Atwood는 이에 관한 최근 블로그 게시물을 보유하고 있습니다 : The Great Newline Schism

Wikipedia 의 본질은 다음과 같습니다 .

CR + LF 시퀀스는 텔레타이프 머신 (일반적으로 ASR33)을 콘솔 장치로 채택한 많은 초기 컴퓨터 시스템에서 공통적으로 사용되었습니다.이 시퀀스는 프린터를 새 라인의 시작 부분에 배치하기 위해 필요했기 때문입니다. 이러한 시스템에서 응용 프로그램에서 이러한 하드웨어 세부 정보를 숨기는 장치 드라이버의 개념이 아직 제대로 개발되지 않았기 때문에 텍스트는 종종 이러한 프린터와 호환되도록 일상적으로 구성되었습니다. 애플리케이션은 텔레타이프 머신과 직접 대화하고 그 규칙을 따라야했습니다.두 기능의 분리는 프린트 헤드가 한 문자 시간에 맨 오른쪽에서 다음 줄의 시작 부분으로 돌아갈 수 없다는 사실을 숨겼습니다. 이것이 시퀀스가 ​​항상 CR과 함께 먼저 전송되는 이유입니다. 실제로 프린트 헤드가 왼쪽 여백으로 이동할 시간을주기 위해 추가 문자 (무시한 CR 또는 NUL은 무시)를 보내야하는 경우가 종종있었습니다. 텔레타이프가 보오율이 높은 컴퓨터 터미널로 교체 된 후에도 많은 운영 체제는 이러한 문자를 자동으로 전송하는 기능을 지원하므로 디스플레이를 스크롤하기 위해 여러 문자 시간이 필요한 저렴한 터미널과 호환됩니다.


5
+1이 간단한 이해를 통해 조합의 순서를 항상 기억한다는 것이죠. 오늘날에도 우리는 여전히 모든 inktjet- 프린터에서이 기계적인 논리를 볼 수 있습니다 (배우기를 싫어하기 때문에 이해하고 싶습니다). 내 다른 메모리 트릭이 있습니다 : "보낸 사람에게 맥 반환"과 "NewLineFeed"(CR 이미의 약자에 R이 있기 때문에 NL === LF가 그리고, \를 기억 N 것을 기억)
GitaarLAB

3
"나는 의심 스럽다 ... 타이밍에 두 개의 제어 코드가 필요했다". 그것은 그것이 말하는 것이 아닙니다. 추가 CR과 NUL은 원래 CR LF가 아니라 다시 돌아올 시간을 제공하기 위해 여기에 있습니다.
Julien Rousseau

11
@Adrian 페르소나 경험을 하시겠습니까? 1) 옛날 텔레타이프 시대에 우리가 사용했던 프린터는 <CR><CR><LF>물론 하나만 실험했습니다 <CR>. 나는 보내 <CR><LF>A긴 줄 후, 당신은 할 수 듣는A캐리지가 완전히 반환하기 전에 인쇄되고.
John Burger

11
@Adrian 2) 잊지 마세요, 이것은 각 문자가 정확히 하나의 기능을 수행하는 전자 기계 시대였습니다. 우리는 종종 줄을 인쇄하고 <CR><CR>올바른 수의 공백 을 보내고 입력 한 다음 같은 단어를 다시 인쇄하여 단어를 강조했습니다.
John Burger

3
@Adrian 3) 그리고 마지막으로 이것은 ASCII가 아닌 Baudot (또는 Murray 코드)를 사용했습니다. 하나의 시작 비트와 1.5 정지 비트 사이에있는 5 개의 데이터 비트. 어떻게 반을 가질 수 있습니까? 다음 문자를 보내기 전에 반 비트 시간을 기다려서 프린트 헤드가 중앙으로 돌아갈 시간을줍니다.
John Burger

16

CR-ASCII 코드 13

LF-ASCII 코드 10.

이론적으로 CR은 커서를 첫 번째 위치 (왼쪽)로 되돌립니다. LF는 커서를 한 줄 아래로 이동하여 한 줄을 공급합니다. 예전에는 프린터와 텍스트 모드 모니터를 제어했던 방식입니다. 이 문자는 일반적으로 텍스트 파일에서 줄 끝을 표시하는 데 사용됩니다. 다른 운영 체제는 다른 규칙을 사용했습니다. 지적했듯이 Windows는 CR / LF 조합을 사용하지만 OSX 이전 Mac에서는 CR 만 사용합니다.


7

ASCII 또는 호환 문자 세트를 기반으로하는 시스템은 LF (줄 바꿈, 0x0A, 10 진수 10) 또는 CR (캐리지 리턴, 0x0D, 10 진수 13)을 개별적으로 사용하거나 CR 다음에 LF (CR + LF, 0x0D 0x0A)를 사용합니다. 이러한 문자는 프린터 명령을 기반으로합니다. 줄 바꿈은 한 줄의 용지가 프린터에서 공급되어야하고 캐리지 리턴은 프린터 캐리지가 현재 줄의 시작 부분으로 돌아 가야한다는 것을 나타냅니다.

자세한 내용 은 다음과 같습니다 .


5

"레코드 구분 기호"또는 "라인 터미네이터"의 슬픈 상태는 어두운 시대의 컴퓨팅의 유산입니다.

이제 우리가 표현하고자하는 모든 것이 어떤 방식 으로든 구조화 된 데이터이며 라인, 파일, 프로토콜, 메시지, 마크 업 등을 정의하는 다양한 추상화를 준수한다는 것을 당연한 것으로 여깁니다.

그러나 옛날 옛적에 이것은 사실이 아니었다. 응용 프로그램 내장 제어 문자 및 장치 별 처리 CR과 LF가 모두 필요한 뇌사 시스템은 단순히 레코드 구분 기호 나 줄 종결 자에 대한 추상화가 없었습니다. 텔레타이프 또는 비디오 디스플레이를 열 1로 되돌리려면 CR이 필요했고 다음 줄로 넘어가려면 LF (오늘, NL, 동일한 코드)가 필요했습니다. 원시 데이터를 장치에 덤프하는 것 이외의 작업을 수행한다는 아이디어가 너무 복잡하다고 생각합니다.

유닉스와 맥은 실제로 라인 엔드에 대한 추상화 를 지정했습니다 . 슬프게도 그들은 다른 것을 지정했습니다. (Unix, ahem이 먼저 나왔습니다.) 그리고 자연스럽게 그들은 이미 SOP에 "가까운"제어 코드를 사용했습니다.

오늘날 거의 모든 운영 소프트웨어가 Unix, Mac 또는 MS 운영 SW의 자손이므로 우리는 줄 끝 혼란에 갇혀 있습니다.


1

CRB x'odoa ascii와 논리적으로 비교되는 EBCDIC NL = x'15 '에서 파생 된 NL ... 이것은 데이터를 메인 프레임에서 미드 레인지로 물리적으로 이동할 때 분명합니다. 공생 적으로 (비전적인 사람들 만이 ebcdic을 사용하므로) NL은 CR 또는 LF 또는 CRLF와 동일시되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.