Charset 검출

Charset detection

문자 인코딩 검출, 문자 집합 검출 또는 코드 페이지 검출은 텍스트를 나타내는 일련의 바이트의 문자 인코딩을 경험적으로 추측하는 프로세스입니다.이 기술은 신뢰할 수 없는 것으로 인식되며 HTTP와 같은 특정 메타데이터가 있을 때만 사용됩니다.Content-Type: 헤더를 사용할 수 없거나 신뢰할 수 없는 것으로 간주됩니다.

이 알고리즘은 일반적으로 검출되는 각 코드 페이지에 인코딩된 다양한 언어의 삼각문자 빈도 분포와 같은 바이트 패턴의 통계 분석을 포함합니다. 이러한 통계 분석은 언어 검출을 수행하기 위해서도 사용할 수 있습니다.이 과정은 통계 데이터에 의존하기 때문에 실수하지 않습니다.

일반적으로 문자 집합 검출이 올바르지 않으면 mojibake가 발생합니다.

charset 검출이 확실하게 기능하는 몇 안 되는 경우 중 하나는 UTF-8 검출입니다.이는 UTF-8에서 비활성 바이트시퀀스의 비율이 높기 때문에 높은 비트세트를 가진 바이트를 사용하는 다른 부호화 텍스트가 UTF-8 유효성 테스트를 통과할 가능성은 매우 낮기 때문입니다.단, 잘못 기술된 문자 집합 검출 루틴에서는 신뢰성 높은 UTF-8 테스트가 최초로 실행되지 않으며 UTF-8이 다른 부호화라고 판단될 수 있습니다.예를 들어 독일 도시 München의 이름을 포함한 UTF-8의 웹사이트는 테스트 전에 ISO-8859 부호화라고 판정된 코드 때문에 Mchennchen으로 표시되는 것이 일반적이었다.

UTF-16은 데이터를 16비트 워드로 분할할 때 검출해야 할 줄 바꿈(U+000A)과 공백(U+0020)의 수가 많고 짝수 또는 홀수 위치에서 NUL 바이트의 수가 많기 때문에 검출에 매우 신뢰성이 있습니다.텍스트가 유효한 UTF-16인지 테스트에 의존하여 공통 문자를 확인해야 합니다.UTF-16에서 할당된 Unicode 문자의 모든 바이트가 중국어 UTF-16LE로 인식되기 때문에 Windows 운영시스템은 ASCII에서 "Bush hidded the facts"라는 문구를 잘못 검출합니다.

ISO-8859 인코딩이 혼재된 환경에서는 특히 유럽에서 Charset 검출이 불안정합니다.이것들은 ASCII와 하위 절반의 오버랩을 공유하는 밀접하게 관련된8비트 부호화이며 바이트 배열은 모두 유효합니다.이러한 인코딩을 구별하는 기술적인 방법은 없으며, 이러한 인코딩을 인식하는 것은 문자 빈도나 철자 등의 언어 특징을 식별하는 데 달려 있습니다.

경험적 접근 탐지는 신뢰할 수 없으므로 올바른 인코딩으로 데이터 세트에 레이블을 올바르게 지정하는 것이 좋습니다.HTTP가 을 통해 제공하는 HTML 문서는 Content-Type: 헤더를 사용하여 아웃 오브 밴드로 인코딩해야 합니다.

내용 유형: 텍스트/메시지;charset=UTF-8

디스크상의 파일로 편집되는 것과 같은 고립된 HTML 문서는 파일내의 메타 태그에 의해서, 이러한 헤더를 의미할 수 있습니다.

< >메타 http-equiv="콘텐츠 유형" 내용="문자/문자;문자 집합=UTF-8인치 > 

또는 HTML5의[1] 새로운 메타 타입을 사용하여

< >메타 문자 집합='utf-8' > 

문서가 유니코드인 경우, 일부 UTF 인코딩은 포함된 BOM(Initial Byte Order Mark)으로 문서에 레이블을 명시적으로 지정합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "4.2.5 The meta element". W3C.

외부 링크