한국어

개발자 도구 · 텍스트 비교

보이지 않는 차이점: 줄바꿈 없는 공백, 스마트 따옴표 및 유니코드 형식

· 작동 방식

텍스트 비교 유니코드 디버깅

뚜렷한 숨겨진 문자 모양을 포함하는 시각적으로 유사한 선 블록
원본 ToolAcre 벡터 일러스트레이션

화면에서 동일하게 보이는 줄이 줄바꿈하지 않는 공백과 둥근 따옴표부터 너비가 0인 문자 및 분해된 악센트에 이르기까지 바이트별로 다를 수 있는 이유와 이를 찾는 방법을 설명합니다.

동일해 보이지만 변경된 것으로 표시된 두 줄 — 눈에 띄는 이유 없이 검토에 실패한 번역 파일로 열립니다.

변환 라인은 이웃 라인과 똑같이 렌더링될 수 있으며 여전히 비교에 실패합니다. 브라우저 글꼴은 코드 포인트 경계를 숨기고 악센트를 결합하며 유사한 모양을 다른 구두점에 할당합니다. ToolAcre는 선택된 대소문자 또는 공백 변환 후에만 JavaScript 문자열을 비교하므로 플래그가 지정된 행이 실제 텍스트 구별을 노출할 수 있습니다.

캐릭터에 대한 가정이 아닌 위치를 신뢰하세요. 코드 포인트나 16진수 검사기를 표시하는 편집기에 의심되는 줄을 복사합니다. 차이점은 어떤 라인이 다른지 알려줍니다. 내부 위치에 주석을 달거나 담당하는 유니코드 값의 이름을 지정하지 않습니다.

줄바꿈하지 않는 공백과 그 관계 — 워드 프로세서가 삽입하는 U+00A0 및 기타 공백 문자와 일반 공백이 일치하지 않는 이유를 설명합니다.

U+00A0 줄바꿈 방지 공백은 U+0020 일반 공백과 동일한 문자가 아닙니다. 일반 모드에서는 회선 키가 뚜렷하게 유지됩니다. 공백 무시에서 공백 실행 대체는 트리밍 후 해당 실행을 일반 공백으로 줄여 이러한 차이점을 일부 사라지게 할 수 있습니다.

해당 옵션은 유니코드 정리 명령이 아닌 일치 변환입니다. 표시된 동일한 행에는 원본 왼쪽 텍스트가 유지되며 수정된 문서가 생성되지 않습니다. 게시 시스템에 줄 바꿈 방지 공백이 필요한 경우 정규화된 일치는 의도적인 레이아웃 지침을 수정하기보다는 숨길 수 있습니다.

공백 모드는 유니코드 공백을 축소할 수 있습니다. 일반 비교에서는 고유한 문자가 보존됩니다.

직선 아포스트로피와 따옴표는 인쇄상의 열기 및 닫기 형식과 다릅니다. 대소문자 무시는 구두점을 변경하지 않으며 공백 처리는 따옴표를 다시 쓰지 않습니다. 따라서 워드 프로세서의 자동 수정 기능은 문장이 한 눈에 동일하게 읽혀도 전체 줄 대체를 생성할 수 있습니다.

대상에 따라 의도한 구두점을 선택하세요. 소스 코드, 검색 키 및 데이터 형식에는 정확한 ASCII 문자가 필요할 수 있지만 편집 사본에는 활자체 형식이 선호될 수 있습니다. 비교를 통해 차이가 입증되었지만 어느 쪽이 올바른지 결정하는 정책은 없습니다.

너비가 0인 문자 및 방향 문자 — 너비가 0인 공백, 조이너 및 아직 선을 변경하지 않는 것으로 렌더링되는 양방향 표시를 포함합니다.

너비가 0인 공백, 결합자 및 방향 표시는 눈에 보이는 문자를 그리지 않고도 문자열 위치를 차지할 수 있습니다. ToolAcre는 HTML 해석을 피하면서 텍스트 콘텐츠를 사용하여 입력을 렌더링하지만 안전한 렌더링으로 인해 숨겨진 코드 포인트가 표시되지는 않습니다. 그들은 여전히 ​​일반 라인 평등에 참여합니다.

방향적 동작은 시각적 순서를 저장 순서에 대한 신뢰할 수 없는 지침으로 만들 수도 있습니다. 단지 친숙해 보인다는 이유만으로 의심스러운 혼합 방향 조각을 셸 명령이나 식별자에 복사하지 마세요. 무엇이든 교체하기 전에 특별히 제작된 도구에서 코드 포인트와 주변 컨텍스트를 검사하세요.

구성 및 분해된 악센트 — 기본 문자와 결합 표시를 하나의 코드 포인트로 사용하여 악센트 문자를 사용하여 NFC와 NFD 정규화를 설명합니다.

악센트 문자는 미리 구성된 하나의 코드 포인트로 표시되거나 기본 문자 뒤에 결합 표시가 오는 형태로 표시될 수 있습니다. 저장소에는 `normalize`에 대한 호출이 포함되어 있지 않으므로 정식으로 동일해 보이는 양식은 다른 JavaScript 문자열로 유지되며 제거 및 추가 행을 생성할 수 있습니다.

테스트 스위트는 동일한 유니코드 문자열이 일치함을 증명하고 `café`은 `cafe`과 다릅니다. 문자소 인식 비교를 약속하지 않습니다. 따라서 이 기사에서는 바이트 비교 또는 전체 유니코드 동등성에 대한 주장을 피합니다. 라인 알고리즘은 문자열을 수신하고 변환된 키를 엄격하게 동일하게 비교합니다.

도구가 유니코드 정규화를 수행하지 않기 때문에 합성 액센트와 분해 액센트가 서로 다르게 유지됩니다.

자원 라인이 변경되지 않은 상태로 표시되지만 플래그가 지정되어 있다고 가정합니다. 먼저 모든 옵션을 끈 상태에서 비교한 다음 공백만 전환합니다. 행이 동일해지면 공백과 숨겨진 공백을 검사합니다. 계속 변경된 경우 줄을 반복적으로 다시 입력하는 대신 따옴표를 검사하고 표시와 기타 코드 포인트를 결합하십시오.

문자 검사기는 일반 공백이 예상되는 위치인 U+00A0을 표시할 수 있습니다. 형식 요구 사항을 확인한 후에만 교체하십시오. 번역된 콘텐츠에서 줄 바꿈하지 않는 공백은 의도적인 구두점 규칙일 수 있으며 광범위한 검색 및 바꾸기로 인해 다른 곳에서 올바른 인쇄 체계가 손상될 수 있습니다.

이것이 다루지 않는 것 — 선이 다르다는 비교 보고서; 유니코드 정규화를 수행하거나 문자를 대체하지 않습니다.

텍스트 비교는 NFC 또는 NFD를 정규화하지 않으며, 혼란스러운 항목을 식별하고, 너비가 0인 표시를 제거하거나, 복구된 출력을 생성하지 않습니다. 또한 인코딩된 바이트를 비교하지 않습니다. 이는 일반 라인 비교기가 자동으로 선택해서는 안 되는 결과를 초래하는 별도의 작업입니다.

대소문자 무시는 JavaScript `toLowerCase`를 사용하고, 공백 무시는 일치하는 키를 자르고 압축합니다. 두 작업 모두 로케일 인식 조합이나 유니코드 보안 검토를 제공하지 않습니다. 식별자가 안전하거나 언어적으로 동등한 것으로 인증하는 것이 아니라 조사 범위를 좁히기 위해 출력을 사용합니다.

요점: 눈에 비해 차이점을 믿으십시오. 플래그가 지정된 라인이 실제 차이점이라고 결론을 내리고 ToolAcre의 텍스트 비교가 검사할 라인을 정확히 찾아내는 방법을 보여줍니다.

Sight와 Diff가 일치하지 않으면 문자열을 검사할 가치가 있다고 가정합니다. 알고리즘에는 글꼴 모양에 속을 수 있는 시각적 모델이 없습니다. 라인 키가 보입니다. 이러한 제한은 단지 브라우저가 유사하게 그린다는 이유만으로 숨겨진 차이점을 전달하지 못하도록 하기 때문에 유용합니다.

일반 비교를 먼저 실행하고 어떤 옵션이 결과를 변경하는지 기록하고 편집하기 전에 코드 포인트를 검사합니다. 이 증거 추적은 구두점이나 구성에서 공백 정규화를 분리하고 모든 특이한 문자를 ASCII 근사값으로 바꾸는 파괴적인 습관을 방지합니다.