Detecção de Codificação
Detecção de Codificação
HTML chega como bytes, e a camada de codificação responde à primeira pergunta de qualquer pipeline: qual codificação, e qual texto? A detecção segue a abordagem padrão — marcas de ordem de byte primeiro, depois declarações no conteúdo.
Detecção a partir de Bytes
detect_encoding() fareja um fluxo de bytes e retorna um EncodingDetectionResult que contém a codificação detectada, um nível de confiança e o texto decodificado. Um UTF-8 BOM detecta com certeza, e os bytes do BOM são removidos da saída decodificada:
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)O Kit de Ferramentas de Detecção
sniff_bom() inspeciona apenas marcas de ordem de byte; prescan_meta_charset() aplica a meta-análise padrão para declarações de conjunto de caracteres dentro do documento; decode_bytes() realiza a decodificação uma vez que a codificação é escolhida. Codificações não suportadas lançam o UnsupportedEncodingError tipado.
Nomes Canônicos
Os rótulos de codificação variam na prática — latin1, iso-8859-1 e us-ascii significam windows-1252 de acordo com o padrão de codificação. get_canonical_name() mapeia qualquer rótulo registrado para seu nome canônico.
Dicas e Melhores Práticas
- Confie no BOM: quando presente, ele é definitivo e o detector relata confiança certa.
- Normalize os rótulos através de
get_canonical_name()antes de comparar codificações. - Use
result.textda detecção ao invés de re-decodificar os bytes você mesmo.
Problemas Comuns
| Problema | Causa | Correção |
|---|---|---|
| BOM aparece no texto decodificado | Decodificação manual em vez de detect_encoding() | Detecção remove bytes BOM de result.text |
| Comparação de rótulo falha | Incompatibilidade entre alias e nome canônico | Normalizar com get_canonical_name() |
UnsupportedEncodingError gerado | Codificação de entrada fora do registro | Tratar o erro tipado; reencodar a montante |
FAQ
O que a detecção retorna?
Um EncodingDetectionResult com encoding, confidence, e text decodificado.
Os rótulos legados são tratados?
Sim — a tabela de alias mapeia rótulos como latin1 e us-ascii para suas codificações canônicas.
A detecção lê meta tags?
prescan_meta_charset() implementa o padrão meta-prescan e participa da detecção.
Resumo de API Reference
| Classe/Método | Descrição |
|---|---|
detect_encoding | Detectar codificação e decodificar bytes |
EncodingDetectionResult | Objeto de resultado da detecção |
sniff_bom | Inspeção de byte-order-mark |
prescan_meta_charset | Meta-prescan de padrões |
decode_bytes | Decodificar com a codificação escolhida |
get_canonical_name | Canonizar um rótulo de codificação |