Определение кодировки

Обнаружение кодировки

HTML поступает в виде байтов, и слой кодировки отвечает на первый вопрос любого конвейера: какая кодировка и какой текст? Обнаружение следует стандартному подходу — сначала метки порядка байтов, затем декларации внутри содержимого.


Обнаружение из байтов

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()Обнаружение удаляет байты BOM из result.text
Сравнение меток не удалосьНесоответствие псевдонима и канонического имениНормализовать с помощью get_canonical_name()
UnsupportedEncodingError вызванВходная кодировка вне реестраОбработать типизированную ошибку; повторно закодировать upstream

FAQ

Что возвращает обнаружение?

Некий EncodingDetectionResult с encoding, confidence и декодированным text.

Обрабатываются ли устаревшие метки?

Да — таблица алиасов сопоставляет метки, такие как latin1 и us-ascii, их каноническим кодировкам.

Считывает ли обнаружение метатеги?

prescan_meta_charset() реализует стандарты meta-prescan и участвует в обнаружении.


Сводка API Reference

Класс/МетодОписание:
detect_encodingОбнаружить кодировку и декодировать байты
EncodingDetectionResultОбъект результата обнаружения
sniff_bomПроверка маркера порядка байтов
prescan_meta_charsetМетапросканирование стандартов
decode_bytesДекодировать с выбранной кодировкой
get_canonical_nameКанонизировать метку кодировки

См. также:

 Русский