Kodierungserkennung
Kodierungserkennung
HTML kommt als Bytes, und die Encoding-Schicht beantwortet die erste Frage jeder Pipeline: Welche Encoding und welcher Text? Die Detection folgt dem Standards-Ansatz — byte-order marks zuerst, dann in-content declarations.
Erkennung aus Bytes
detect_encoding() untersucht einen Bytestrom und gibt ein EncodingDetectionResult zurück, das die erkannte Encoding, ein Vertrauensniveau und den dekodierten Text enthält. Ein UTF-8 BOM wird mit Sicherheit erkannt, und BOM-Bytes werden aus der dekodierten Ausgabe entfernt:
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)Das Detection Toolkit
sniff_bom() prüft ausschließlich byte-order marks; prescan_meta_charset() wendet den Standards-Meta-Prescan für charset-Deklarationen im Dokument an; decode_bytes() führt die Dekodierung durch, sobald eine Encoding gewählt wurde. Nicht unterstützte Encodings werfen die typisierte UnsupportedEncodingError.
Kanonische Namen
Kodierungsbezeichnungen variieren in der Praxis — latin1, iso-8859-1 und us-ascii bedeuten alle windows-1252 gemäß dem Kodierungsstandard. get_canonical_name() ordnet jede registrierte Bezeichnung ihrem kanonischen Namen zu.
Tipps und bewährte Verfahren
- Vertraue dem BOM: Wenn er vorhanden ist, ist er eindeutig und der Detektor gibt ein gewisses Vertrauen an.
- Normalisiere Bezeichnungen über
get_canonical_name(), bevor du Kodierungen vergleichst. - Verwende
result.textaus der Erkennung, anstatt die Bytes selbst erneut zu dekodieren.
Häufige Probleme
| Problem | Ursache | Fehlerbehebung |
|---|---|---|
| BOM erscheint im dekodierten Text | Manuelle Dekodierung statt detect_encoding() | Erkennung entfernt BOM-Bytes von result.text |
| Label-Vergleich schlägt fehl | Alias vs kanonischer Name stimmt nicht überein | Normalisieren mit get_canonical_name() |
UnsupportedEncodingError ausgelöst | Eingabekodierung liegt außerhalb des Registers | Behandle den typisierten Fehler; upstream neu enkodieren |
FAQ
Was gibt die Erkennung zurück?
Ein EncodingDetectionResult mit encoding, confidence und dekodiertem text.
Werden Legacy-Labels verarbeitet?
Ja — die Alias-Tabelle ordnet Labels wie latin1 und us-ascii ihren kanonischen Codierungen zu.
Liest die Erkennung Meta-Tags?
prescan_meta_charset() implementiert den Standard-Meta-Prescan und beteiligt sich an der Erkennung.
API Reference Zusammenfassung
| Klasse/Methode | Beschreibung |
|---|---|
detect_encoding | Erkenne die Kodierung und dekodiere Bytes |
EncodingDetectionResult | Erkennungs-Ergebnisobjekt |
sniff_bom | Untersuchung des Byte-Order-Mark |
prescan_meta_charset | Meta-Vorprüfung der Standards |
decode_bytes | Dekodieren mit einer gewählten Kodierung |
get_canonical_name | Kanonisiere eine Kodierungsbezeichnung |