CR LF (Windows), LF (Unix) 및 CR (Macintosh) 줄 바꿈 유형의 차이점 (가능한 경우 예제 포함)을 알고 싶습니다.
\r
및 \n
특정 프로그래밍 언어에 사용되는 추상화입니다. 이 질문을 닫으면 질문 사이의 근본적인 차이점에 대해 글을 쓰고 잘못된 정보를 영속시킵니다.
\n
모든 프로그래밍 언어에서 같은 의미는 아닙니다.
CR LF (Windows), LF (Unix) 및 CR (Macintosh) 줄 바꿈 유형의 차이점 (가능한 경우 예제 포함)을 알고 싶습니다.
\r
및 \n
특정 프로그래밍 언어에 사용되는 추상화입니다. 이 질문을 닫으면 질문 사이의 근본적인 차이점에 대해 글을 쓰고 잘못된 정보를 영속시킵니다.
\n
모든 프로그래밍 언어에서 같은 의미는 아닙니다.
답변:
실제로 파일에 어떤 바이트가 저장되어 있는지입니다. CR
타자기부터 캐리지 리턴 및 LF
줄 바꿈에 대한 바이트 코드입니다 . 행 끝 마커로 배치 된 바이트 만 참조합니다.
항상 wikipedia 에 대한 추가 정보 .
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 디자이너는 문자 중 하나만 사용하기로 결정했지만 서로 아주 잘 통신하지 못했습니다. -)
대부분의 최신 텍스트 편집기 및 텍스트 중심 응용 프로그램은 파일의 줄 끝 규칙을 자동으로 감지하고 그에 따라 표시 할 수있는 옵션 / 설정 등을 제공합니다.
CR+LF
)이 다른 시스템에서 두 줄 바꿈으로 표시 될 수 있음을 발견했습니다 . 텍스트를 표시하는 편집기는 캐리지 리턴과 줄 바꿈을 개행 구분 기호로 지원하므로, 1 줄이 의도 한 곳에 2 줄을 만들 수 있습니다. 그래서 동안 CR+LF
수 있습니다 대부분의 호환, 나는 그것이 문제없이 생각하지 않습니다.
이것은 내가 찾은 좋은 요약입니다.
캐리지 리턴 (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 이외의 운영 체제에서 줄 바꾸기 문자로 사용됩니다.
이것을 간단히 언급하는 대답이 없으므로 간결하게 요약하면 다음과 같습니다.
캐리지 리턴 (MAC pre-OSX)
줄 바꿈 (Linux, MAC OSX)
캐리지 리턴 및 줄 바꿈 (Windows)
ASCII 코드가 이상한 형식으로 보이면 다른 기수 /베이스의 숫자 13과 10, 일반적으로 기수 8 (8 진수) 또는 기수 16 (16 진수)입니다.
Jeff Atwood는 이에 관한 최근 블로그 게시물을 보유하고 있습니다 : The Great Newline Schism
Wikipedia 의 본질은 다음과 같습니다 .
CR + LF 시퀀스는 텔레타이프 머신 (일반적으로 ASR33)을 콘솔 장치로 채택한 많은 초기 컴퓨터 시스템에서 공통적으로 사용되었습니다.이 시퀀스는 프린터를 새 라인의 시작 부분에 배치하기 위해 필요했기 때문입니다. 이러한 시스템에서 응용 프로그램에서 이러한 하드웨어 세부 정보를 숨기는 장치 드라이버의 개념이 아직 제대로 개발되지 않았기 때문에 텍스트는 종종 이러한 프린터와 호환되도록 일상적으로 구성되었습니다. 애플리케이션은 텔레타이프 머신과 직접 대화하고 그 규칙을 따라야했습니다.두 기능의 분리는 프린트 헤드가 한 문자 시간에 맨 오른쪽에서 다음 줄의 시작 부분으로 돌아갈 수 없다는 사실을 숨겼습니다. 이것이 시퀀스가 항상 CR과 함께 먼저 전송되는 이유입니다. 실제로 프린트 헤드가 왼쪽 여백으로 이동할 시간을주기 위해 추가 문자 (무시한 CR 또는 NUL은 무시)를 보내야하는 경우가 종종있었습니다. 텔레타이프가 보오율이 높은 컴퓨터 터미널로 교체 된 후에도 많은 운영 체제는 이러한 문자를 자동으로 전송하는 기능을 지원하므로 디스플레이를 스크롤하기 위해 여러 문자 시간이 필요한 저렴한 터미널과 호환됩니다.
<CR><CR><LF>
물론 하나만 실험했습니다 <CR>
. 나는 보내 <CR><LF>A
긴 줄 후, 당신은 할 수 듣는 가 A
캐리지가 완전히 반환하기 전에 인쇄되고.
<CR><CR>
올바른 수의 공백 을 보내고 입력 한 다음 같은 단어를 다시 인쇄하여 단어를 강조했습니다.
ASCII 또는 호환 문자 세트를 기반으로하는 시스템은 LF (줄 바꿈, 0x0A, 10 진수 10) 또는 CR (캐리지 리턴, 0x0D, 10 진수 13)을 개별적으로 사용하거나 CR 다음에 LF (CR + LF, 0x0D 0x0A)를 사용합니다. 이러한 문자는 프린터 명령을 기반으로합니다. 줄 바꿈은 한 줄의 용지가 프린터에서 공급되어야하고 캐리지 리턴은 프린터 캐리지가 현재 줄의 시작 부분으로 돌아 가야한다는 것을 나타냅니다.
자세한 내용 은 다음과 같습니다 .
"레코드 구분 기호"또는 "라인 터미네이터"의 슬픈 상태는 어두운 시대의 컴퓨팅의 유산입니다.
이제 우리가 표현하고자하는 모든 것이 어떤 방식 으로든 구조화 된 데이터이며 라인, 파일, 프로토콜, 메시지, 마크 업 등을 정의하는 다양한 추상화를 준수한다는 것을 당연한 것으로 여깁니다.
그러나 옛날 옛적에 이것은 사실이 아니었다. 응용 프로그램 내장 제어 문자 및 장치 별 처리 CR과 LF가 모두 필요한 뇌사 시스템은 단순히 레코드 구분 기호 나 줄 종결 자에 대한 추상화가 없었습니다. 텔레타이프 또는 비디오 디스플레이를 열 1로 되돌리려면 CR이 필요했고 다음 줄로 넘어가려면 LF (오늘, NL, 동일한 코드)가 필요했습니다. 원시 데이터를 장치에 덤프하는 것 이외의 작업을 수행한다는 아이디어가 너무 복잡하다고 생각합니다.
유닉스와 맥은 실제로 라인 엔드에 대한 추상화 를 지정했습니다 . 슬프게도 그들은 다른 것을 지정했습니다. (Unix, ahem이 먼저 나왔습니다.) 그리고 자연스럽게 그들은 이미 SOP에 "가까운"제어 코드를 사용했습니다.
오늘날 거의 모든 운영 소프트웨어가 Unix, Mac 또는 MS 운영 SW의 자손이므로 우리는 줄 끝 혼란에 갇혀 있습니다.
\n
일반적으로 줄 바꿈으로 표시되지만 반드시 줄 바꿈 일 필요는 없습니다.