비교는 html 파일을 바이너리 파일로 식별합니다.

비교는 html 파일을 바이너리 파일로 식별합니다.

여기에 뭔가 빠졌을 수도 있지만 오늘 약간 다른 diff두 파일을 .html실행하려고 시도했을 때 다음 메시지가 표시되어 놀랐습니다 .

$ diff index.html index3.html
Binary files index.html and index3.html differ

파일이 바이너리로 간주되는 이유는 무엇 .html입니까? 이를 피하고 텍스트 파일로 처리할 수 있는 방법이 있습니까?

답변1

GNU 차이점파일을 바이너리로 처리처음 몇 킬로바이트 내에 null 바이트가 있는 경우. 텍스트 파일에는 null 바이트가 포함되어 있지 않지만 이진 파일에는 처음 몇 백 바이트 내에 null 바이트가 포함될 가능성이 높으므로 이는 좋은 경험적 방법입니다. 파일 이름은 중요하지 않습니다.

diff가 바이너리 간의 차이점을 표시하지 않는 이유는 일반적으로 읽을 수 없기 때문입니다. 바이너리 형식은 블록이 변경된 후 유용한 재정렬을 제공하는 줄로 분리할 수 없는 경우가 많습니다. 종종 근본적으로 더 작은 의미 변화로 변경됩니다(예: 압축 파일에 문자 하나를 삽입하면 뒤따르는 모든 내용이 변경될 수 있음). 인쇄할 수 없습니다. 그러나 diff는 null 바이트를 사용할 수 있습니다. diff가 파일을 텍스트로 처리하도록 하려면(즉, 차이점 표시) --text(또는 -a) 옵션을 전달하십시오.

diff --text index.html index3.html

이것이 유용한지 여부는 파일에 널 바이트가 포함된 이유에 따라 다릅니다. Null 바이트는 HTML 파일에서 흔하지 않습니다. 힌트를 얻을 수 있어요

file index.html

파일이 실제로 압축된 경우 diff는 유용한 내용을 표시하지 않습니다. 파일의 압축을 풀어야 하며 압축 메커니즘을 반영하는 이름을 지정해야 합니다(예: index.html.gz. 압축된 파일이 있는 경우 bash/ksh/zsh에서 즉시 압축을 풀 수 있습니다( uncompress표준 입력에서 압축된 파일을 읽고 압축 해제된 텍스트를 표준 출력에 쓰는 실제 명령으로 대체됨).

diff --label=index.html <(uncompress <index.html) --label=index3.html <(uncompress <index3.html)

파일이 ASCII가 아닌 인코딩으로 되어 있을 수 있습니다. 예를 들어UTF-16,UCS-2,UTF-32또는 사전 유니코드 멀티바이트 인코딩입니다. 이 인코딩은 웹에서는 거의 사용되지 않습니다. 웹 브라우저는 이를 지원하지만 문서 작성 도구에는 문제가 있을 수 있습니다. 이 경우 생산 체인을 수정하여 사용하면UTF-8대신에. 동시에, diff --text존재하는 비ASCII 콘텐츠에 따라 읽을 수도 있고 읽지 못할 수도 있는 결과를 제공하거나, 즉석에서 파일을 변환하여 diff로 전달할 수 있습니다(예: little-endian UTF로 인코딩된 파일 사용). -16:

diff --label=index.html <(iconv -f UTF-16LE -t UTF-8 <index.html) --label=index3.html <(iconv -f UTF-16LE -t UTF-8 <index3.html)

관련 정보