Как определить кодировки символов в Python
Aspose.HTML FOSS для Python обнаруживает кодировки символов из необработанных байтов так, как предписывают стандарты: сначала маркировка порядка байтов, затем объявления внутри содержимого. Это руководство анализирует поток байтов и нормализует метки кодировок, используя pip для установки.
Пошаговое руководство
Шаг 1: Установите пакет
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Шаг 2: Импортируйте необходимые функции
from aspose_html.encoding.detection import detect_encodingШаг 3: Определите кодировку потока байтов
Обнаруживается UTF-8 BOM с определённой уверенностью, и байты BOM удаляются из декодированного текста:
result = detect_encoding(b"\xef\xbb\xbf<p>x</p>")
print(result.encoding)
print(result.confidence)
print(result.text)Шаг 4: Нормализовать метки кодировок
Устаревшие метки отображаются в канонические имена — latin1, iso-8859-1 и us-ascii являются windows-1252 согласно стандарту кодировок. Используйте get_canonical_name() из той же семейства модулей для нормализации меток перед сравнениями.
Распространённые проблемы и решения
В моём декодированном тексте появляется BOM. Это происходит при ручном декодировании; detect_encoding() удаляет байты BOM из result.text.
Сравнение кодировок не проходит для эквивалентных меток. Сравнивайте канонические имена, а не сырые метки — нормализуйте обе стороны с помощью get_canonical_name().
Экзотическая кодировка вызывает ошибку. Кодировки, не входящие в реестр, вызывают типизированное UnsupportedEncodingError; обработайте её и, если возможно, перекодируйте выше по цепочке.
Часто задаваемые вопросы
Что возвращает detect_encoding?
EncodingDetectionResult с обнаруженным encoding, уровнем confidence и декодированным text.
Учитывает ли обнаружение метатеги?
Да — стандартный meta-prescan участвует через prescan_meta_charset(), когда BOM отсутствует.
Могу ли я декодировать вручную, когда знаю кодировку?
Да — decode_bytes() декодирует с выбранной кодировкой.