한국어

데이터 및 스프레드시트 · CSV 클리너

UTF-8 및 Windows-1252 혼동되는 방법: Mojibake CSV 내보내기 복구

· 작동 방식

CSV 인코딩 데이터 정리

UTF-8 전용 경계에 도달하고 대체 표시를 생성하는 레거시 인코딩된 바이트
원본 ToolAcre 벡터 일러스트레이션

'José'가 'José'가 되면 바이트는 괜찮고 해석이 잘못된 것입니다. 이 게시물에서는 가장 일반적인 두 가지 인코딩이 충돌하는 방식, 증상을 인식하는 방법, 재디코딩을 통해 이를 복구하는 방법에 대해 설명합니다.

악센트가 붙은 이름과 둥근 따옴표는 기호 수프로 변합니다. UTF-8 파일의 숨길 수 없는 패턴은 Windows-1252로 읽히고 그 반대도 됩니다.

로드 후 교체 다이아몬드가 되는 고객 이름은 CSV Cleaner가 잘못된 레거시 코드 페이지를 감지했다는 증거가 아닙니다. 구성은 그 반대입니다. UTF-8만 인식되고 Windows-1252 또는 Shift-JIS 파일은 UTF-8로 읽혀집니다. 따라서 CSV 구문 분석기가 문자를 확인하기 전에 잘못된 바이트 시퀀스가 ​​이미 대체될 수 있습니다.

개요는 José와 같은 친숙한 mojibake를 중심으로 하지만 브라우저 읽기 경로는 `File.text()`을 사용하고 인코딩 선택기를 제공하지 않습니다. 이 기사는 그 약속을 수정합니다. 이 도구 내에서 실행 가능한 증상은 대체 문자 또는 손상된 텍스트이며, 복구를 위해 원본 파일 바이트가 다른 곳에서 보존되는 것입니다.

UTF-8이 아닌 파일은 확인된 mojibake 패턴이 아닌 대체 문자로 이 도구에 도달합니다.

구분된 파일은 디스크의 바이트 수인 반면 파서는 JavaScript 문자열에서 작동합니다. 인코딩은 해당 레이어 간의 매핑을 정의합니다. CSV 구문은 쉼표, 따옴표 및 레코드 경계를 명명하지만 어떤 레거시 매핑이 모든 비ASCII 바이트를 생성했는지 `File.text()`에 알려주는 신뢰할 수 있는 디스크 선언을 전달하지 않습니다.

디코딩을 통해 U+FFFD 대체 문자가 생성되면 이후 CSV 작업은 해당 자리 표시자를 일반 텍스트로 수신합니다. 트리밍이나 내보내기에서는 어떤 원본 바이트 시퀀스나 문자가 거기에 속하는지 추론할 수 없습니다. 그렇기 때문에 손상된 디스플레이에서 수집한 찾기 및 바꾸기 목록보다 손길이 닿지 않은 소스가 더 중요합니다.

두 가지 일반적인 용의자 — UTF-8의 멀티바이트 시퀀스와 Windows-1252의 단일 바이트 및 교체 시 예측 가능한 가비지를 생성하는 이유

UTF-8은 멀티바이트 시퀀스가 있는 비ASCII 문자를 나타냅니다. Windows-1252은 많은 서양 문자를 개별 바이트 값에 할당합니다. 하나의 규칙을 다른 규칙으로 읽으면 실패하거나 오해의 소지가 있는 텍스트가 생성될 수 있지만 이 경로는 대체 디코더를 테스트하거나 그럴듯한 언어의 점수를 매기거나 Windows-1252 선택을 제공하지 않습니다.

유일한 인코딩 관련 파서 동작은 텍스트 디코딩 후 선행 U+FEFF UTF-8 바이트 순서 표시를 제거하는 것입니다. 이는 마커가 첫 번째 헤더에 합류하는 것을 방지합니다. 이는 일반적인 인코딩 감지가 아니며 구현에서 어디에도 언급되지 않은 Shift-JIS, UTF-16 또는 지역 코드 페이지를 지원하지 않습니다.

ToolAcre는 UTF-8 텍스트를 허용하고 Windows-1252 후보를 비교하지 않습니다.

대체 문자는 텍스트 디코더가 선택한 해석에 따라 일부 입력 바이트를 매핑할 수 없음을 나타냅니다. 이전의 손실 내보내기로 인해 물음표가 삽입되었을 수 있으며, 이 경우 원래 문자를 이미 사용할 수 없을 수 있습니다. 인식 가능한 Ã 순서는 다른 작업 흐름에서 발생할 수 있지만 이 페이지에서는 해당 기록을 진단하지 않습니다.

하나의 성만으로 소스 인코딩을 결정하지 마십시오. 내보내기 애플리케이션의 설정, 파일 출처, 소스를 그대로 유지하는 바이트 인식 검사기를 확인하세요. 클리너의 행 경고는 인용 마감 및 열 너비와 관련이 있습니다. 이는 문자 인코딩이 정확하다는 증거가 아닙니다.

찾기 및 바꾸기가 아닌 재디코딩 - 문자를 하나씩 패치하는 대신 올바른 인코딩으로 바이트를 읽고 UTF-8을 쓰는 것이 수정된 이유

안정적인 복구는 원래 바이트로 돌아가서 문서화된 소스 인코딩으로 한 번 디코딩한 다음 UTF-8을 작성하는 것입니다. 해당 작업은 UTF-8 전용 텍스트 경로를 통해 열기 전에 발생해야 합니다. 디코딩 후 눈에 보이는 가비지 조각을 교체하면 합법적인 발생이 손상될 수 있으며 하나의 자리 표시자로 축소된 여러 원본 문자를 구분할 수 없습니다.

CSV Cleaner에는 바이트 수준의 재디코딩 제어가 없으므로 개요의 약속된 변환을 수행할 수 없습니다. 신뢰할 수 있는 소스 인식 변환 방법을 사용하고 대표 이름을 소스 시스템과 비교한 다음 구분 기호, 인용, 공백 및 중복 작업에 대한 UTF-8 결과를 여기로 가져옵니다.

이 도구 외부의 원본 바이트에서 복구합니다. 여기에서 문자를 교체하면 복원할 수 없습니다.

안전한 데모를 위해 액센트가 있는 이름 하나를 포함하는 작은 레거시 인코딩 파일을 만들고 16진수 복사본을 유지하세요. 도구에 로드하고 대체 문자가 나타나는지 관찰합니다. 해당 관찰은 UTF-8 경계를 설정합니다. 예상되는 이름이 알려져 있다는 이유만으로 원래 코드 페이지를 설정하지 않습니다.

다음으로 ToolAcre 외부에서 명시적으로 선택된 디코더를 사용하여 손길이 닿지 않은 바이트를 변환하고 UTF-8을 저장하고 그 결과를 로드합니다. 이제 CSV 구문 분석기가 구분 기호를 정상적으로 처리하는 동안 이름은 그대로 도착해야 합니다. 이 두 가지 경로를 비교하면 청소 담당자가 복구 작업을 직접 수행했다고 주장하지 않고도 올바른 교훈을 얻을 수 있습니다.

작업 예: 지원되지 않는 수리를 청구하지 않고 UTF-8 경계를 보여줍니다.

이중 인코딩된 파일은 이전 변환을 재구성해야 할 수 있으며 이미 리터럴 물음표와 함께 저장된 데이터는 다른 소스 없이는 복구할 수 없습니다. 구현에는 인코딩 기록이나 바이트 보존 복구 기능이 포함되어 있지 않기 때문에 이 문서에서는 범용 반전을 규정하지 않습니다.

또한 UTF-16, 동아시아 인코딩 또는 정규화 형식에 대한 지원 주장을 방지합니다. 중요한 경우 이름을 지정하고 테스트하는 변환기를 선택하십시오. 성공적인 CSV 구문 분석은 구분 기호 상태 시스템에서 발견된 행만 증명합니다. 해당 단계 이전의 문자 해독이 충실했는지 여부에 대해서는 아무 말도하지 않습니다.

해석을 한 번 수정합니다. - ToolAcre CSV Cleaner의 인코딩 복구가 장치에서 내보내기를 다시 디코딩하고 다시 인코딩하는 방법

ToolAcre는 선행 UTF-8 BOM을 제거하고 결과 문자열을 브라우저의 다운로드 경로를 통해 UTF-8 CSV로 직렬화할 수 있습니다. 임의의 레거시 바이트는 사용자가 선택한 디코더 없이 이미 브라우저의 고정 텍스트 읽기 경계를 넘었기 때문에 올바른 유니코드로 변환할 수 없습니다.

교체 표시를 정지 신호로 취급합니다. 소스를 보존하고, 생산자로부터 인코딩을 식별하고, 적절한 바이트 인식 도구를 사용하여 한 번 변환하고, 중요한 이름을 확인하세요. 그런 다음 구성이 실제로 약속하는 구조적 작업에 대해 CSV 클리너를 사용하십시오.