그래서 저는 각각 127,955줄과 줄당 24개의 임의 문자가 포함된 두 개의 파일을 만들었습니다. 텍스트에 관한 한 두 파일은 완전히 동일했습니다. 그러나 한 파일에는 Unix 줄 바꿈이 있었고 다른 파일에는 Windows 줄 바꿈이 있었습니다. Unix 줄 바꿈이 있는 파일은 3,124KB인 반면 Windows 줄 바꿈이 있는 파일은 3,249KB입니다. 파일 사이에는 다른 차이점이 없었으므로 어떤 이유로 Windows 줄 바꿈이 더 많은 공간을 차지한다고 가정해야 합니다. 왜 그런지 아시나요?
답변1
16진수 편집기에서 텍스트 파일을 열면 줄 끝에 표시되는 차이점은 다음과 같습니다.
Windows 줄 끝:0x0D 0x0A
유닉스 라인 엔딩:0x0A
은 0x0D
캐리지 리턴의 16진수 값입니다(텍스트로는 간단히 로 표시됨 \r
).
은 0x0A
새 줄 문자의 16진수 값입니다(텍스트로는 간단히 로 표시됨 \n
).
줄 끝이 Windows EOL 형식인 경우 줄은 2개의 문자로 끝납니다: \r\n
; Unix EOL 형식은 1개의 문자로 끝납니다: \n
.
따라서 127,955 * (24 + 1) == 3,198,875 bytes (3,123.9 KB)
Unix EOL 및 127,955 * (24 + 2) == 3,326,830 bytes (3,248.86 KB)
Windows EOL의 경우입니다.
도움이 되길 바랍니다.
답변2
실제 "이유" 비트에 관해서 - 역사적으로 텔레타이프라이터는 캐리지 리턴(16진수 0D)을 사용하여 프린트 헤드를 왼쪽 여백으로 이동한 다음 줄 바꿈(16진수 0A)을 사용하여 용지를 전진시켰습니다.
Commodore, Atari 및 (유닉스 이전) Apple은 캐리지 리턴을 줄 끝 기호로 유지했습니다. 유닉스는 라인 피드를 유지했습니다. 그리고 CP/M/DOS는 둘 다 유지했습니다.
많은 인터넷 프로토콜(예: HTTP)은 여전히 두 가지 측면(일명 "CRLF")으로 정의되어 있지만 실제 텍스트 파일에서 내가 본 Windows의 유일한 프로그램은 "그냥" 라인을 올바르게 처리하지 못하는 것입니다. 피드는 메모장입니다.
기술적으로 "뉴라인"이라는 용어는 이러한 역사적 차이를 가리기 위해 존재합니다. 예를 들어, C에서 "\n" 또는 Lisp에서 #\Newline은 하나의 특정 바이트 문자가 특별히 필요할 때 "\r" 또는 #\Return과 비교하여 로컬 시스템이 선호하는 표기법에 매핑됩니다.
답변3
Windows에서는 캐리지 리턴과 개행 문자를 사용합니다. 유닉스에서는 개행 문자만 사용합니다. 따라서 줄 바꿈당 1바이트가 추가됩니다.