개행 LF : Line Feed(ASCII 10)
복귀 CR : Carriage Return(ASCII 13)
간단하게 타자기를 생각을 하면 한 글자씩 입력하면 먼지 옆으로 한 칸씩 밀려 나고
한 줄을 다 입력하고 나서는 그걸 왼쪽으로 밀어 주고 또 입력을 하는 것을 영화에서 봤을 것이다.
간단하게 한 줄에서 왼쪽 끝으로 밀어주는 것이 CR이고
다음 줄에 입력을 하도록 종이를 한 줄 밀어주는 것이 LF 라고 할 수 있다.
어떤 연유에서 처리방법들이 그렇게 달라진지는 모르겠지만
DOS/Windows 계열에서는 엔터를 CR+LF(\r\n) 으로 처리하고
Unix/Linux 계열에서는 엔터를 LF(\n)으로 처리하고
MAC 계열에서는 엔터를 CR(\r)로 처리한다고 한다 <- 요건 접해보질 않아서..
* \r은 return을 \n은 newline를 의미한다.
굳이 DOS/Windows 상황에서 \r\n의 차이점을 느끼려면 파일을 읽을 때 binary모드로 읽으면 파일에 엔터가 \r\n으로 표기 되지만 ASCII 모드로 읽으면 \n 으로만 표기가 되는 것을 알 수 있다.
그래서 옛날에 캐리지 리턴과 라인 피드를 쓰면 보통 우리가 '엔터'키를 누른 듯한 효과를 냅니다.
windows는 개행을 케리지 리턴(cr)과
라인 피드(lf)이 두 개의 문자를 개행코드로 하고, 유닉스는
라인 피드를 개행코드로 하며, 멕킨토시는 케리지 리턴을 개행코드로 합니다.
[출처 : http://blog.naver.com/ys9922?Redirect=Log&logNo=90025503930]
새줄 문자(newline)는 텍스트의 한 줄이 끝남을 표시하는 문자 또는 문자열이다. 개행 문자, 줄바꿈 문자(line break), EOL(end-of-line)과 같은 뜻이다. 기종이나 운영 체제에 따라 새줄 문자를 나타내는 코드가 다를 수도 있다. 그래서 텍스트를 다른 시스템으로 전송할 때 새줄 문자의 치환 작업도 필요하다.
새줄 문자가 마지막 줄 끝에도 들어가는지 여부가 헷갈릴 수 있다. 대부분의 시스템이 관습적으로 마지막 줄 끝에도 새줄 문자를 넣는다. 프로그램 중에는 마지막 줄 끝에 새줄 문자가 없으면 오류가 발생하는 것도 있다.
자동 줄 바꿈 기능이 있는 소프트웨어는 주로 문단 사이 또는 수직 목록 사이에서 새줄 문자를 사용한다. 새줄 문자를 사용하는 방식으로 하드 리턴과 소프트 리턴이 있다.
역사[편집]
ISO와 ASA(ANSI의 전신)는 동시에 ASCII를 개발했다. 1963년부터 1968년까지 ISO 초안은 CR+LF와 LF를 새줄 문자로 정했다. ASA의 초안은 CR+LF만 지원했다. CR+LF는 텔레타이프, ASR33을 콘솔 장치로 사용한 초기 컴퓨터 시스템에서 널리 쓰였다.
텔레타이프의 프린터가 다음 줄의 처음부터 인쇄하기 위해서는 두 글자를 인쇄하는 시간이 필요했다. 텔레타이프는 텍스트의 한 글자를 같은 시간 간격으로만 프린터로 전송할 수 있었다. 프린터에서 좌우로 움직이는 장치가 캐리지(carriage)였는데 이것이 오른쪽 끝에서 왼쪽 끝으로 이동하는 시간이 두 글자 인쇄하는 만큼 걸렸다. 새줄 문자로 코드 하나만 쓸 경우 다른 한 글자를 인쇄할 수 없었다. 그래서 텔레타이프를 쓰던 시절에는 CR+LF 두 코드를 새줄 문자로 썼다. 캐리지 리턴이 먼저 전송되었다. 그리고 종이를 한 줄 옮기는 라인 피드가 이어서 전송되었다. 좌우 여백이 줄어들면 캐리지가 이동하는 시간이 더 필요하므로 CR이나 NUL을 더 채워 넣어야 할 때도 있었다.
컴퓨터가 막 탄생하던 시절에는 디스크와 메모리가 비쌌기 때문에 1964년에 나온 운영 체제 멀틱스는 새줄 문자를 LF 하나로 통일했다. 유닉스도 멀틱스의 새줄 문자 관례를 이어받았고 리눅스도 이 방식을 쓰고 있다.
1981년에 등장한 MS-DOS는 CP/M의 CR+LF 방식을 따랐다. CP/M은 시리얼 라인으로 터미널을 연결했기 때문에 화면 전환 속도가 느렸다. 느린 터미널에서 줄바꿈이 있을 때 스크롤 하는 시간과 보조를 맞추기 위해 CR+LF 방식을 쓰는 것이 자연스러웠다. 윈도도 이 관례를 따르고 있다.
표현[편집]
줄바꿈을 표현하는 방법은 시스템과 운영 체제에 따라 여러 가지가 있다. 윈도는 ASCII의 CR+LF로 새줄을 나타내고 유닉스는 LF로 새줄을 나타낸다. 맥 OS은 새줄 문자로 버전 9까지 CR을 썼지만 버전 10부터 LF를 쓰고 있다. 새줄 문자로 이밖의 다른 코드를 사용하는 시스템도 있다. 특정 코드를 사용하지 않고 레코드 하나에 한 줄씩 저장하거나 줄의 길이를 고정시켜서 줄바꿈을 표현하는 시스템도 있다.
ASCII[편집]
ASCII 시스템에서는 새줄 문자로 라인 피드(line feed, LF, '\n', 0x0A), 캐리지 리턴(carriage return, CR, '\r', 0x0D)이 주로 사용된다. 라인 피드는 프린터에서 종이가 한 줄씩 인쇄되며 나오는 것을 뜻한다. 캐리지 리턴은 프린터에서 실제 인쇄를 수행하는 장치가 한 줄의 끝에서 시작 위치로 돌아가는 것을 뜻한다. 새줄 문자로 드물게 RS(record separator, 0x1E)를 쓰는 시스템도 있었다.
LF | 멀틱스, 유닉스, 리눅스, 제닉스, AIX, OS X, FreeBSD |
---|---|
CR+LF | DEC TOPS-10, RT-11, CP/M, MP/M, 도스, OS/2, 윈도, 심비안 OS, 팜 OS |
CR | 콤모도어 8비트 머신, TRS-80, 애플 II, 맥 OS (버전 9 이하), OS-9 |
RS | POSIX 이전의 QNX |
HTTP, SMTP, FTP, IRC 등 인터넷 프로토콜 대부분은 ASCII의 CR+LF를 새줄 문자로 사용하도록 규정하고 있다. 그러나 홀로 쓰인 LF도 지원하도록 권장하고 있다.
유니코드[편집]
유니코드 표준은 여러 글자를 줄바꿈 문자로 정의했다. 유니코드를 지원하는 프로그램은 이것들을 한 줄의 끝으로 인식해야 한다.
LF | 라인 피드(Line Feed), U+000A |
---|---|
FF | 폼 피드(Form Feed), U+000C |
CR | 캐리지 리턴(Carriage Return), U+000D |
CR+LF | 연속된 CR과 LF |
NEL | 다음 줄(Next Line), U+0085 |
LS | 줄 구분자(Line Separator), U+2028 |
PS | 문단 구분자(Paragraph Separator), U+2029 |
EBCDIC[편집]
IBM 메인프레임, z/OS(OS/390), i5/OS(OS/400) 등 EBCDIC 시스템은 새줄 문자로 NEL(next line, 0x15)을 사용한다. EBCDIC에도 CR, LF로 불리는 글자가 있지만 ASCII의 것과 코드가 다르다. EBCDIC 시스템 중에는 NEL 코드가 다른 것도 있어서 주의해야 한다.
기타 코드[편집]
CDC 6000 시리즈의 운영 체제는 60비트짜리 단어 끝 부분에 6비트짜리 글자 2개 이상이 0으로 채워진 상태를 새줄 문자로 정의했다. 채우는 문자로 0 대신 콜론이 되도록 설정을 바꿀 수 있었다. 싱클레어 리서치의 가정용 컴퓨터, ZX80, ZX81은 새줄 문자 코드가 0x76이었다.
레코드 방식[편집]
옛날의 메인프레임 운영 체제는 텍스트 한 줄마다 레코드에 저장하는 방식이었다. 레코드의 시작 부분에 캐리지 제어 문자를 둬서 줄바꿈 여부, 캐리지 리턴 여부를 조절할 수 있게 했다.
몇몇 메인프레임 운영 체제는 고정된 줄 길이로 한 줄을 저장했다. 그 길이는 주로 80자였다. 외부에서 텍스트 파일을 받았을 때 한 줄이 80자보다 짧으면 공백 문자로 채워야 했고 한 줄이 너무 길면 잘려나갔다. 이것은 천공 카드의 방식을 흉내낸 것이다. 천공 카드 한 장마다 한 줄씩 기록했고 이 길이가 80자였다.
OpenVMS도 레코드 기반 파일 시스템을 사용한다. 텍스트 파일을 저장할 때 레코드마다 한 줄씩 저장한다. 대부분 파일 형식이 줄 구분 문자를 사용하지 않지만 레코드 관리 서비스가 투명한 새줄 문자를 삽입할 수 있다.
같이 보기[편집]
출처 - http://ko.wikipedia.org/wiki/%EC%83%88%EC%A4%84_%EB%AC%B8%EC%9E%90
'Development > Common' 카테고리의 다른 글
1세대/2세대/3세대/4세대/5세대 언어 (0) | 2012.02.24 |
---|---|
확장문자 or 특수문자(escape sequence) (0) | 2012.02.18 |
참조 구현(Reference Implementation) (0) | 2012.02.09 |
스크립트 언어(Script Language) (0) | 2012.02.05 |
ActionScript (0) | 2012.01.23 |