Windows 줄 바꿈이 Unix 줄 바꿈보다 큰 이유는 무엇입니까?

Windows 줄 바꿈이 Unix 줄 바꿈보다 큰 이유는 무엇입니까?

그래서 저는 각각 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바이트가 추가됩니다.

관련 정보