'EOL'에 해당하는 글 1건

  • 2015.03.16 CRLF 

CRLF

Daily/Prog 2015. 3. 16. 01:09

CR - Carrage Return(\r)
LF - Line Feed(\n)

 

 

텍스트를 작성하거나 편집하는 프로그램에는 한 줄의 끝을 나타내는 특정 코드가 들어간다.
줄바꿈 문자(line break), EOL(end-of-line) 등으로 잘 알려진 개행문자(newline)이다.
ASCII 시스템의 개행 문자로 CR+LF(Windows/Dos - \r\n) 방식과 LF(Unix/Linux - \n) 방식을 주로 사용한다.

 

기종이나 OS 에 따라 개행 문자가 다르기 때문에, 그 텍스트 파일을 다른 시스템으로 전송할 때는 개행 문자의 치환 작업도 필요하다.
HTTP, SMTP, FTP, IRC 등 인터넷 프로토콜 대부분은 ASCII의 CR+LF를 사용하도록 규정하고 있지만, LF도 지원하도록 권장하고 있다.
특히 FTP는 ASCII 모드에서 텍스트 파일 전송시 시스템의 기본 개행 문자(CR+LF 와 LF)로 변환해 주는 기능이 있다.

 

Linux 에서 생성된 파일은 Windows 의 일부 프로그램에서 개행이 되지 못하고 하나의 긴줄로 나타날 수 있다.
반대로 Windows 에서 생성된 파일을 Linux에서 볼 때 CR 이 ^M 이나 <cr> 등으로 나타날 수 있다.

 

텍스트 파일의 개행 문자 타입을 식별하기 위해 file 명령어를 사용할 수 있다.
그리고 Vim 에서도 Windows 파일과 호환되도록 파일 포맷을 바꿀 수 있다.

 

 

$ file myfile.txt
myfile.txt: ASCII English text

$ vim myfile.txt
:set fileformat=dos or se ff=dos
:wq
$ file myfile.txt
myfile.txt: ASCII English text, with CRLF line terminators

 

 

이 시점에서 다시 한번 개행 문자를 뒤져본 이유는 조금 이해할 수 없는 상황을 경험했기 때문이다.
php 파일에서 특정 lib 파일을 include 하는데, 그 lib 파일을 수정할 일이 있어서 vi 에서 수정을 하였더니,
브라우저에서 코드가 한줄로 다 뿌려지고 난리가 났었다.
물론 그 파일은 윈도우에서 생성한 dos 포맷이었지만, vi 에서도 확인을 했고 dos 포맷으로 저장도 되었는데 저 난리.
editplus 로 ftp 연결해서 수정을 하면 멀쩡하고. 허허~ 다시 한번 정리를 해도 그 이유를 모르겠다...

 

보통 저런 상황이 되면 file 명령어에 다음과 같은 문자열이 출력된다.
PHP script, UTF-8 Unicode text, with very long lines, with CRLF, LF line terminators.
본인이 수정한 파일이 아니라 원인을 모를 경우 파일을 새로 생성하는 것이 신상에 좋음.
한가지 예상되는 것은 윈도우 파일 편집기와 Vim 간에 복사하기 붙여넣기에서 개행문자가 문제를 일으킨 것 같다는...!

 


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,