Jak wykrywać kodowania znaków w Python
Aspose.HTML FOSS dla Python wykrywa kodowania znaków z surowych bajtów zgodnie ze standardami: najpierw znaczniki kolejności bajtów, potem deklaracje w treści. Ten przewodnik analizuje strumień bajtów i normalizuje etykiety kodowań, używając pip do instalacji.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Krok 2: Zaimportuj wymagane funkcje
from aspose_html.encoding.detection import detect_encodingKrok 3: Wykryj kodowanie strumienia bajtów
Wykryto UTF-8 BOM z pewnym poziomem pewności, a bajty BOM są usuwane z zdekodowanego tekstu:
result = detect_encoding(b"\xef\xbb\xbf<p>x</p>")
print(result.encoding)
print(result.confidence)
print(result.text)Krok 4: Normalizacja etykiet kodowania
Etykiety starszych wersji mapują się na nazwy kanoniczne — latin1, iso-8859-1 i us-ascii są wszystkie windows-1252 zgodnie ze standardem kodowania. Użyj get_canonical_name() z tej samej rodziny modułów, aby znormalizować etykiety przed porównaniami.
Typowe problemy i rozwiązania
W moim zdekodowanym tekście pojawia się BOM. To zdarza się przy ręcznym dekodowaniu; detect_encoding() usuwa bajty BOM z result.text.
Porównania kodowań nie powiodą się dla równoważnych etykiet. Porównuj nazwy kanoniczne, a nie surowe etykiety — normalizuj obie strony przy użyciu get_canonical_name().
Egzotyczne kodowanie generuje błąd. Kodowania spoza rejestru podnoszą określony typ UnsupportedEncodingError; obsłuż to i ponownie zakoduj w górnym przepływie, jeśli to możliwe.
Najczęściej zadawane pytania
Co zwraca detect_encoding?
Obiekt EncodingDetectionResult z wykrytym encoding, poziomem confidence i zdekodowanym text.
Czy wykrywanie sprawdza meta tagi?
Tak — standardowe meta-przeskanowanie uczestniczy poprzez prescan_meta_charset(), gdy nie ma BOM.
Czy mogę ręcznie dekodować, gdy znam kodowanie?
Tak — decode_bytes() dekoduje przy wybranym kodowaniu.