Wie man Zeichenkodierungen in Python erkennt

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_encoding

Schritt 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.

Siehe auch

 Deutsch