개발자 도구 · 텍스트 비교
Windows와 Unix가 줄 끝 부분에 동의하지 않는 이유: CR, LF 및 CRLF 이야기
· 배경
텍스트 비교 줄 끝 소프트웨어 기록
타자기 및 텔레타이프부터 최신 운영 체제까지 줄 끝을 추적하고 모든 크로스 플랫폼 프로젝트에서 두 가지 규칙이 여전히 공존하는 이유를 설명합니다.
하나의 보이지 않는 캐릭터, 수십 년의 마찰 — 지속적인 크로스 플랫폼 성가심으로 시작됩니다.
줄 끝은 일반 편집기에서는 보이지 않지만 파일과 프로토콜에는 중요할 수 있습니다. 그러나 ToolAcre에서는 라인 비교 전에 CR, LF 및 CRLF가 정규화됩니다. 해당 구분 기호만 다른 쌍은 동일한 라인 배열과 동일한 결과를 생성합니다.
해당 동작은 진단할 수 있는 항목을 제한하면서 이 경로에 대한 실제적인 질문을 해결합니다. 비교에서는 텍스트가 편집자에게 도달한 후 원본 파일에 포함된 개행 바이트가 무엇인지 증명할 수 없습니다. 보존 또는 프로토콜 확인을 위해서는 바이트 인식 도구가 필요합니다.
타자기의 캐리지 리턴 및 줄 바꿈 — 캐릭터가 원래 설명한 두 가지 물리적 동작을 설명합니다.
캐리지 리턴 및 라인 피드라는 용어는 물리적, 역사적 의미를 갖지만 저장소에는 타자기 소스가 없습니다. 기계적인 기원 이야기를 기억에서 반복하는 것은 그 설명이 친숙하게 들리더라도 증거 계약을 위반하는 것입니다.
따라서 이 문서에서는 CR을 ` ` 코드 단위로, LF를 ` ` 구현이 이를 사용하는 경우에만. 역사적 설명은 명시적으로 출처가 아닌 개요에서 차용하기보다는 나중에 기본 표준이나 아카이브에서 추가해야 합니다.
타자기 의미는 외부 소스가 필요한 역사적 주장입니다.
마찬가지로 소스 파일에는 텔레타이프 규칙이나 초기 운영 체제 결정이 문서화되어 있지 않습니다. 현재 JavaScript에서는 호환성 선택만 나타납니다. 분할하기 전에 모든 CRLF 또는 단독 CR을 LF로 교체합니다.
해당 변환은 종료 전용 변경 사항으로 출력을 채우지 않고 여러 규칙에 따라 생성된 붙여넣은 텍스트를 허용합니다. 이는 하나의 정규식으로 표시되고 세 가지 형식 모두에 대한 테스트로 고정되는 구현 결정입니다.
텔레타이프 및 운영 체제 계보는 저장소 증거 외부에 있습니다.
Unix를 LF, Windows를 CRLF, 이전 시스템을 단독 CR과 연관시키는 것이 일반적이지만 현재 저장소는 이러한 채택에 대한 역사적 증거가 될 수 없습니다. 안전 클레임이 작동합니다. 세 가지 입력은 모두 `splitLines` 내에서 LF가 됩니다.
터미널 LF는 마지막 빈 행을 생성하지 않지만 중간에 빈 줄은 남아 있습니다. 이러한 구별은 물리적 구분 기호 차이가 지워지더라도 논리적 내용은 유지된다는 것을 의미합니다. 비교는 바이트 보존이 아닌 줄 중심입니다.
코드는 세 가지 규칙이 정규화됨을 증명합니다. 시스템이 왜 이를 채택했는지는 입증되지 않습니다.
일부 네트워크 및 메시지 프로토콜은 정확한 줄 종결자를 지정하지만 해당 요구 사항은 사양에 따라야 합니다. ToolAcre의 정규화는 원래 구분 기호 증거가 의도적으로 제거되기 때문에 이러한 와이어 형식에 대한 적합성을 입증하는 데 부적합합니다.
정확한 CRLF 시퀀스가 중요한 경우 구문 분석하기 전에 16진수 뷰어나 프로토콜 유효성 검사기를 사용하세요. 깨끗한 텍스트 비교 결과는 일치하는 논리 라인을 확인하는 동시에 전송 수준 결함을 숨길 수 있습니다. 도구가 서로 다른 질문에 답하기 때문에 두 가지 관찰이 모두 사실일 수 있습니다.
프로토콜 요구사항에는 자체 사양이 필요하므로 여기서는 생략합니다.
`alpha beta`, `alpha beta` 및 `alpha beta`을 쌍으로 비교합니다. 각각은 알파와 베타라는 두 개의 라인을 생성하며 추가나 제거는 없습니다. 공백을 무시해도 이러한 동일성이 발생하지 않습니다. 분할 중에 정규화가 이미 발생했습니다.
하나의 베타 행에 후행 공백을 추가하면 이제 일반 모드에서 차이가 보고됩니다. 공백 무시를 활성화하면 공백이 사라질 수 있습니다. 이 시퀀스는 개행 처리와 줄 키 공백 처리를 분리하고 잘못된 옵션이 부여되는 것을 방지합니다.
작동 예: 세 가지 끝 형식 모두 공백 옵션 이전에 동일한 것으로 비교됩니다.
이 경로는 편집기를 구성하거나, 파일을 다시 작성하거나, Git 속성을 설정하거나 엔딩을 대량 변환하지 않습니다. 또한 결과 행에 원래 구분 기호를 노출하지 않습니다. 붙여넣은 문자열은 개행 마이그레이션 유틸리티가 아닌 비교 파이프라인에 들어갑니다.
역사적 원인 및 프로토콜 표준은 보류 중인 출처에서 생략되었습니다. 이러한 제한으로 인해 더 작지만 정확한 기사가 남습니다. 이 구현에서 세 가지 규칙이 수행하는 작업, 빈 줄이 남아 있는 이유 및 여기에서 동일성이 바이트 ID를 설정하지 않는 이유입니다.
요약: 텍스트에 어떤 규칙이 적용되는지 파악 — 기록을 요약하고 ToolAcre의 텍스트 비교가 차이점이 줄 끝인지 확인하는 데 어떻게 도움이 되는지 설명합니다.
어떤 증거가 도구에서 살아남았는지 알아보세요. 정규화 후 ToolAcre는 공통 구분 기호를 통해 논리적 줄 내용을 비교할 수 있습니다. 소스가 어떤 규칙을 사용했는지 또는 다운스트림 소비자가 하나의 정확한 바이트 시퀀스를 요구하는지 여부를 알 수 없습니다.
사람이 검토하려면 브라우저 diff를 사용하고 저장소 또는 프로토콜 적용을 위해서는 바이트 수준 검사를 사용하세요. 변환이 명시적일 때 도구는 신뢰할 수 있습니다. 검토자는 검증해야 하는 속성을 보존하는 검토자를 선택할 책임이 있습니다.