Cómo detectar codificaciones de caracteres en Python
Aspose.HTML FOSS para Python detecta codificaciones de caracteres a partir de bytes crudos de la manera que prescribe el estándar: marcas de orden de bytes primero, luego declaraciones dentro del contenido. Esta guía analiza un flujo de bytes y normaliza las etiquetas de codificación, usando pip para la instalación.
Guía paso a paso
Paso 1: Instalar el paquete
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Paso 2: Importar funciones requeridas
from aspose_html.encoding.detection import detect_encodingPaso 3: Detectar la codificación de un flujo de bytes
Un UTF-8 BOM se detecta con cierta confianza, y los bytes BOM se eliminan del texto decodificado:
result = detect_encoding(b"\xef\xbb\xbf<p>x</p>")
print(result.encoding)
print(result.confidence)
print(result.text)Paso 4: Normalizar etiquetas de codificación
Las etiquetas heredadas se asignan a nombres canónicos — latin1, iso-8859-1 y us-ascii son todos windows-1252 según el estándar de codificación. Use get_canonical_name() de la misma familia de módulos para normalizar las etiquetas antes de las comparaciones.
Problemas comunes y soluciones
Un BOM aparece en mi texto decodificado. Eso ocurre con la decodificación manual; detect_encoding() elimina los bytes BOM de result.text.
Las comparaciones de codificación fallan para etiquetas equivalentes. Compare nombres canónicos, no etiquetas crudas — normalice ambos lados con get_canonical_name().
Una codificación exótica genera un error. Las codificaciones fuera del registro generan el tipado UnsupportedEncodingError; manéjalo y vuelve a codificar aguas arriba si es posible.
Preguntas frecuentes
¿Qué devuelve detect_encoding?
Un EncodingDetectionResult con el encoding detectado, un nivel confidence y el text decodificado.
¿La detección revisa las metaetiquetas?
Sí — el meta-preescaneo de estándares participa a través de prescan_meta_charset() cuando no hay BOM presente.
¿Puedo decodificar manualmente una vez que conozco la codificación?
Sí — decode_bytes() decodifica con una codificación elegida.