캐리지 리턴으로 인해 Windows에서 Linux보다 텍스트 파일이 더 큽니까?

캐리지 리턴으로 인해 Windows에서 Linux보다 텍스트 파일이 더 큽니까?

Linux와 Windows에 동일한 ASCII 텍스트 파일이 있다고 가정해 보겠습니다.

one
two
three

이 두 파일은 두 운영 체제 모두에서 각각 \n및 EOL 문자를 갖습니다.\r\n

이것은 Linux에서 파일이 더 작다는 것을 의미합니까?

이 테스트는 Linux에서 수행되었으며 긍정적인 것으로 보입니다.

$ echo -en 'one\ntwo\nthree\n' | wc --bytes 
14
$ echo -en 'one\r\ntwo\r\nthree\r\n' | wc --bytes 
17

답변1

엄밀히 말하면 제한적이긴 하지만 테스트는 정확합니다. Linux에서는 명령으로 생성된 문자열이 echo각각 14바이트와 17바이트를 차지한다는 것만 보여줍니다( wc --bytes. \n및 를 통해 \r각각 1바이트를 차지하므로 Linux에서는 DOS/Windows 스타일 개행 문자를 사용할 때). , 개행마다 1바이트가 손실됩니다.

엄밀히 말하면 저장 요구 사항은 파일을 작성하는 데 사용하는 프로그램에 따라 다릅니다. Linux나 Windows는 파일 내용에 어떤 것도 부과하지 않습니다. CRLF 개행 문자가 포함된 파일은 Linux에 저장될 수 있고, LF 개행 문자가 포함된 파일은 Windows에 저장될 수 있습니다. 두 운영 체제 중 하나에서 파일의 저장 요구 사항을 결정하려면 사용하려는 도구를 사용하여 두 운영 체제 모두에 파일을 작성하고 운영 체제 도구를 사용하여 파일 크기를 측정해야 합니다.

파일은 일반적으로 특정 저장 단위의 배수를 사용하여 저장되므로 줄 바꿈과 관련된 변경 사항은 실제 영향을 미치지 않을 수 있습니다.

답변2

아마도.

Windows는 CR 및 LF 문자를 특별히 처리하지 않고도 바이너리 파일을 완벽하게 저장할 수 있습니다. 그렇지 않으면 바이너리 파일 형식이 작동하지 않습니다. 그러나 Windows 프로그램은 일반적으로 LF만 사용하는 Unixen 규칙과 달리 개행 문자를 CR+LF 쌍으로 저장합니다. 이 습관이 시스템 라이브러리에 프로그래밍되어 있을 수도 있지만 오랫동안 Windows 프로그래밍을 접해 본 적이 없어서 말씀드릴 수 없습니다.

하지만 그게 다가 아닙니다... 메모장을 열고 파일을 저장하기 시작하면 몇 가지 서식 옵션이 표시됩니다. 내가 가지고 있는 시스템에서는 "ANSI", "Unicode" 및 "UTF-8"을 선택할 수 있습니다. 내용 foo⏎bar⏎doo⏎(여기서 개행 문자)이 포함된 파일을 만들었고 결과 파일 크기는 15, 32, 18바이트였습니다.

첫 번째는 간단 foo\r\nbar\r\ndoo\r\n하고 Windows-1252 코드 페이지에 저장되어 있지만 이러한 문자와는 아무 관련이 없습니다. An은 ä여기에 바이트로 저장됩니다. 두 번째는 UTF-16(또는 UCS-2?)이므로 문자당 2바이트에 2바이트 BOM(바이트 순서 표시)이 추가됩니다. 문자에는 CR, LF가 포함되므로 15자에 BOM을 더해 총 32바이트입니다. 세 번째 UTF-8은 UTF-8로 인코딩된 BOM이 텍스트 앞에 추가되고 3바이트가 추가된다는 점을 제외하면 첫 번째와 동일합니다. UTF-8에서 an은 ä두 문자입니다. 글쎄요, 그 글을 쓴 후에 "ASCII 텍스트 파일"에 대해 언급하셨지만 인코딩 간의 차이로 인해 응용 프로그램이 파일에 원하는 것은 무엇이든 쓸 수 있다는 것을 알 수 있었습니다.

echo -e 'foo\nbar\ndoo\n'Windows에서 Cygwin의 Bash를 사용하고 실행하면 CR 바이트 없이 12바이트만 얻을 수 있기 를 바랍니다 . 마찬가지로 Windows의 모든 텍스트 편집기는 LF만 개행 문자로 사용하여 파일을 저장할 수 있습니다.

따라서 실제로 파일을 생성하는 데 사용하는 프로그램과 파일을 저장하도록 요청하는 형식에 따라 다릅니다.

관련 정보