Виявлення кодування
Визначення кодування
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 піднято | Кодування вхідних даних поза реєстром | Обробити типізовану помилку; повторно кодувати вище |
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 | Канонізуйте мітку кодування |