인코딩 감지

인코딩 감지

HTML는 바이트 형태로 도착하며, 인코딩 계층은 모든 파이프라인의 첫 번째 질문에 답합니다: 어떤 인코딩이며, 어떤 텍스트인가? 감지는 표준 방식을 따릅니다 — 먼저 바이트 순서 표시(BOM)를 확인하고, 그 다음 내용 내 선언을 확인합니다.


바이트에서 감지하기

detect_encoding()은 바이트 스트림을 검사하고, 감지된 인코딩, 신뢰도 수준, 그리고 디코딩된 텍스트를 포함하는 EncodingDetectionResult을 반환합니다. UTF-8 BOM은 확실히 감지되며, BOM 바이트는 디코딩된 출력에서 제거됩니다:

from aspose_html.encoding.detection import detect_encoding
result = detect_encoding(b"\xef\xbb\xbf<p>x</p>")
print(result.encoding)
print(result.confidence)
print(result.text)

감지 툴킷

sniff_bom()은 바이트 순서 표시만을 검사합니다; prescan_meta_charset()은 문서 내 문자 집합 선언에 대한 표준 메타 사전 스캔을 적용합니다; decode_bytes()은 인코딩이 선택되면 디코딩을 수행합니다. 지원되지 않는 인코딩은 지정된 UnsupportedEncodingError를 발생시킵니다.

표준 이름

인코딩 레이블은 실제 환경에서 다양하게 나타납니다 — latin1, iso-8859-1, 그리고 us-ascii는 모두 인코딩 표준에 따라 windows-1252을 의미합니다. get_canonical_name()는 등록된 모든 레이블을 정식 이름으로 매핑합니다.


팁 및 모범 사례

  • BOM을 신뢰하세요: 존재할 경우 이는 결정적이며 탐지기는 확실한 신뢰도를 보고합니다.
  • 인코딩을 비교하기 전에 get_canonical_name()를 통해 레이블을 정규화하세요.
  • 바이트를 직접 다시 디코딩하는 대신 탐지 결과에서 result.text를 사용하세요.

일반적인 문제

문제원인수정
디코딩된 텍스트에 BOM이 나타남detect_encoding() 대신 수동 디코드감지 시 result.text에서 BOM 바이트를 제거
라벨 비교 실패별칭과 정식 이름 불일치다음과 함께 정규화 get_canonical_name()
UnsupportedEncodingError 발생레지스트리 외부의 입력 인코딩타입된 오류를 처리하고; 상위 단계에서 다시 인코딩

FAQ

탐지 결과는 무엇을 반환하나요?

다음 EncodingDetectionResult은 encoding, confidence, 그리고 디코딩된 text을 포함합니다.

레거시 레이블이 처리됩니까?

예 — 별칭 테이블은 latin1 및 us-ascii과 같은 레이블을 해당 정규 인코딩에 매핑합니다.

감지는 메타 태그를 읽습니까?

prescan_meta_charset()은 표준 메타 프리스캔을 구현하고 감지에 참여합니다.


API Reference 요약

클래스/메서드설명
detect_encoding인코딩을 감지하고 바이트를 디코드
EncodingDetectionResult감지 결과 객체
sniff_bomByte-order-mark 검사
prescan_meta_charset표준 메타 프리스캔
decode_bytes선택한 인코딩으로 디코드
get_canonical_name인코딩 레이블 정규화

참조

 한국어