Wykrywanie kodowania

Wykrywanie kodowania

HTML przychodzi jako bajty, a warstwa kodowania odpowiada na pierwsze pytanie każdego potoku: które kodowanie i jaki tekst? Wykrywanie podąża za standardowym podejściem — najpierw znaczniki kolejności bajtów, potem deklaracje w treści.


Wykrywanie z bajtów

detect_encoding() analizuje strumień bajtów i zwraca EncodingDetectionResult zawierający wykryte kodowanie, poziom pewności oraz zdekodowany tekst. UTF-8 BOM jest wykrywane jako pewne, a bajty BOM są usuwane z zdekodowanego wyjścia:

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)

Zestaw narzędzi wykrywania

sniff_bom() sprawdza jedynie znaczniki kolejności bajtów; prescan_meta_charset() stosuje standardowy meta-przegląd w celu wykrycia deklaracji zestawu znaków w dokumencie; decode_bytes() wykonuje dekodowanie po wybraniu kodowania. Nieobsługiwane kodowania powodują wyrzucenie typowanego UnsupportedEncodingError.

Nazwy kanoniczne

Etykiety kodowania różnią się w praktyce — latin1, iso-8859-1 i us-ascii wszystkie oznaczają windows-1252 zgodnie ze standardem kodowania. get_canonical_name() mapuje dowolną zarejestrowaną etykietę na jej kanoniczną nazwę.


Wskazówki i najlepsze praktyki

  • Zaufaj BOM: gdy jest obecny, jest definitywny, a detektor raportuje pewną pewność
  • Znormalizuj etykiety przy użyciu get_canonical_name() przed porównywaniem kodowań
  • Użyj result.text z wykrywania zamiast ponownie dekodować bajty samodzielnie

Typowe problemy

ProblemPrzyczynaRozwiązanie
BOM pojawia się w zdekodowanym tekścieRęczne dekodowanie zamiast detect_encoding()Wykrywanie usuwa bajty BOM z result.text
Porównanie etykiet nie powiodło sięNiezgodność aliasu z nazwą kanonicznąNormalizuj przy użyciu get_canonical_name()
Podniesiono UnsupportedEncodingErrorKodowanie wejściowe spoza rejestruObsłuż błąd typowany; ponownie zakoduj w poprzednim etapie

FAQ

Co zwraca wykrywanie?

Jedno EncodingDetectionResult z encoding, confidence i zdekodowanym text.

Czy obsługiwane są starsze etykiety?

Tak — tabela aliasów mapuje etykiety takie jak latin1 i us-ascii na ich kanoniczne kodowania.

Czy detekcja odczytuje meta tagi?

prescan_meta_charset() implementuje standard meta-prescan i uczestniczy w wykrywaniu.


Podsumowanie API Reference

Klasa/MetodaOpis
detect_encodingWykryj kodowanie i dekoduj bajty
EncodingDetectionResultObiekt wyniku wykrywania
sniff_bomSprawdzanie znacznika kolejności bajtów
prescan_meta_charsetMeta-przegląd standardów
decode_bytesDekoduj przy użyciu wybranego kodowania
get_canonical_nameUstandaryzuj etykietę kodowania

Zobacz także

 Polski