Detección de codificación
Detección de codificación
HTML llega como bytes, y la capa de codificación responde la primera pregunta de cualquier canal: ¿qué codificación y qué texto? La detección sigue el enfoque estándar — marcas de orden de bytes primero, luego declaraciones dentro del contenido.
Detección a partir de bytes
detect_encoding() inspecciona una secuencia de bytes y devuelve un EncodingDetectionResult que lleva la codificación detectada, un nivel de confianza y el texto decodificado. Un UTF-8 BOM se detecta como seguro, y los bytes del BOM se eliminan de la salida 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)El kit de detección
sniff_bom() inspecciona solo las marcas de orden de bytes; prescan_meta_charset() aplica el meta-preescaneo de estándares para declaraciones de juego de caracteres dentro del documento; decode_bytes() realiza la decodificación una vez que se elige una codificación. Las codificaciones no compatibles generan el UnsupportedEncodingError tipado.
Nombres canónicos
Las etiquetas de codificación varían en la práctica — latin1, iso-8859-1 y us-ascii significan windows-1252 según el estándar de codificación. get_canonical_name() asigna cualquier etiqueta registrada a su nombre canónico.
Consejos y Mejores Prácticas
- Confía en el BOM: cuando está presente, es definitivo y el detector informa una confianza cierta.
- Normaliza las etiquetas mediante
get_canonical_name()antes de comparar codificaciones. - Utiliza
result.textde la detección en lugar de volver a decodificar los bytes tú mismo.
Problemas Comunes
| Problema | Causa | Solución |
|---|---|---|
| BOM aparece en el texto decodificado | Decodificación manual en lugar de detect_encoding() | La detección elimina los bytes BOM de result.text |
| La comparación de etiquetas falla | Desajuste entre alias y nombre canónico | Normalizar con get_canonical_name() |
UnsupportedEncodingError generado | Codificación de entrada fuera del registro | Manejar el error tipado; volver a codificar aguas arriba |
FAQ
¿Qué devuelve la detección?
Un EncodingDetectionResult con encoding, confidence y decodificado text.
¿Se manejan las etiquetas heredadas?
Sí — la tabla de alias asigna etiquetas como latin1 y us-ascii a sus codificaciones canónicas.
¿La detección lee las metaetiquetas?
prescan_meta_charset() implementa el meta-prescan de los estándares y participa en la detección.
Resumen de API Reference
| Clase/Método | Descripción |
|---|---|
detect_encoding | Detectar codificación y decodificar bytes |
EncodingDetectionResult | Objeto de resultado de detección |
sniff_bom | Inspección de marca de orden de bytes |
prescan_meta_charset | Meta-preescaneo de estándares |
decode_bytes | Decodificar con la codificación elegida |
get_canonical_name | Canonizar una etiqueta de codificación |