Wie man Zeichenkodierungen in Python erkennt
Aspose.HTML FOSS für Python erkennt Zeichenkodierungen aus Rohbytes so, wie die Standards vorschreiben: zuerst Byte-Order-Marks, dann In-Content-Deklarationen. Dieser Leitfaden snifft einen Byte-Stream und normalisiert Kodierungsbezeichnungen, wobei pip zur Installation verwendet wird.
Schritt-für-Schritt-Anleitung
Schritt 1: Paket installieren
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Schritt 2: Erforderliche Funktionen importieren
from aspose_html.encoding.detection import detect_encodingSchritt 3: Kodierung eines Byte-Streams erkennen
Ein UTF-8 BOM wird mit gewisser Sicherheit erkannt, und die BOM-Bytes werden aus dem dekodierten Text entfernt:
result = detect_encoding(b"\xef\xbb\xbf<p>x</p>")
print(result.encoding)
print(result.confidence)
print(result.text)Schritt 4: Kodierungsbezeichnungen normalisieren
Legacy-Bezeichnungen werden den kanonischen Namen zugeordnet – latin1, iso-8859-1 und us-ascii sind alle windows-1252 gemäß dem Kodierungsstandard. Verwenden Sie get_canonical_name() aus derselben Modulfamilie, um Bezeichnungen vor Vergleichen zu normalisieren.
Häufige Probleme und Lösungen
Ein BOM erscheint in meinem dekodierten Text. Das passiert bei manueller Dekodierung; detect_encoding() entfernt BOM-Bytes von result.text.
Kodierungsvergleiche schlagen bei gleichwertigen Bezeichnungen fehl. Vergleiche kanonische Namen, nicht rohe Bezeichnungen — normalisiere beide Seiten mit get_canonical_name().
Eine exotische Kodierung löst einen Fehler aus. Kodierungen außerhalb des Registers lösen den typisierten UnsupportedEncodingError; behandle ihn und kodiere upstream neu, falls möglich.
Häufig gestellte Fragen
Was gibt detect_encoding zurück?
Ein EncodingDetectionResult mit dem erkannten encoding, einem confidence-Level und dem dekodierten text.
Berücksichtigt die Erkennung Meta-Tags?
Ja — das Standard-Meta-Prescan beteiligt sich über prescan_meta_charset(), wenn kein BOM vorhanden ist.
Kann ich manuell dekodieren, sobald ich die Kodierung kenne?
Ja — decode_bytes() dekodiert mit einer gewählten Kodierung.