CR, LF 소개
CR (Carriage Return)은 타자기 시절 페이퍼 롤을 우측으로 이동시키기 위한 명령어로, 현재 위치를 좌측 맨 끝으로 옮기는 것을 의미합니다. LF (Line Feed)는 페이퍼 롤을 한 줄씩 아래로 이동시키는 명령어로, 현재 위치에서 한 줄 아래로 이동하는 것을 의미합니다. 즉, 과거에 타자기로 문서 작성을 위해선 CRLF 작업이 반드시 필요했습니다.
CR(Carriage Return) : 현재 커서에서 맨 앞으로 이동하는 동작
LF(Line Feed) : 커서는 그대로 있고, 줄만 바꾸는 동작
CRLF : 두 가지 개행문자를 모두 수행
운영체제 별 CR, LF
Windows 운영체제는 CR+LF(\r\n), Unix 계열은 LF(\n), Mac은 Mac OS X 버전 CR(\r), 이후 Macintosh LF(\n)을 줄 바꿈 문자로 채택하여 사용합니다.
개행 문자가 다른 운영체제간 데이터를 전송하면 어떻게 될까?
서로 다른 운영체제로 인해 개행문자가 다른 경우 (Window (CRLF) 에서 Linux (LF)로 파일 전송을 하는 경우) CR에 해당하는 \r을 공백으로 전체 변환해주어야 합니다. notepad++ 과 같은 텍스트 에디터 프로그램을 사용하면 개행문자를 쉽게 편집할 수 있습니다.
FTP(FIle Transfer Protocol)를 사용하여 파일을 전송할 때, ASCII 모드와 Binary 모드를 선택할 수 있습니다.
ASCII 모드에서는 텍스트 파일을 전송하는 것이 적합합니다. 이때, CR(Carriage Return)과 LF(Line Feed)는 각각 0x0D와 0x0A로 변환되어 전송됩니다. 이는 파일을 전송하는 두 시스템 간의 개행문자 차이를 해결하기 위한 것입니다. ASCII 모드에서는 파일을 문자열로 처리하기 때문에, 개행문자의 변환이 필요합니다.
반면, Binary 모드에서는 바이너리 파일(이미지, 오디오, 비디오 등)을 전송하는 것이 적합합니다. Binary 모드에서는 파일을 바이트 단위로 처리하기 때문에, 개행문자의 변환이 필요하지 않습니다. 따라서, Binary 모드에서는 개행 문자를 그대로 전송해도 무방합니다.
UTF-8(BOM)
BOM(Byte Order Mark)은 바이트 순서 표시의 약자로 파일이 텍스트 맨 앞에 U+FFFF를 두어 UTF-8 형식임을 알려주는 특수한 문자열입니다. BOM의 UTF-8 표현은 0xEF, 0xBB, 0xBF의 3바이트로 구성되어 있습니다.
BOM을 사용하는 것은 UTF-8에서 표준적인 방식은 아니며, Unix 계열에선 BOM을 인식하지 못하는 경우가 있습니다. 또한, BOM이 추가되면 파일의 크기가 늘어나게 되므로, 일부 환경에서는 불필요한 용량 증가를 초래할 수도 있습니다. 따라서, BOM을 사용할지 여부는 상황에 따라 결정 및 주의해야 합니다.
REFERENCE
https://m.blog.naver.com/raincrash/90190291027
https://superuser.com/questions/545461/replace-carriage-return-and-line-feed-in-notepad