Як виявляти кодування символів у 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() декодує з обраним кодуванням.