Biblioteca de detección de encoding en python

Esto de alguna manera está relacionado con mi pregunta aquí .

Proceso toneladas de textos (principalmente en HTML y XML) obtenidos a través de HTTP. Estoy buscando una biblioteca en python que pueda hacer una detección inteligente de encoding basada en diferentes estrategias y convertir textos a unicode utilizando la mejor conjetura de encoding de caracteres posible.

Descubrí que Chardet hace la autodetección extremadamente bien. Sin embargo, detectar automáticamente todo es el problema porque es LENTO y muy contrario a todos los estándares. Según las chardet frecuentes de chardet , no quiero atornillar los estándares.

De las mismas preguntas frecuentes aquí está la lista de lugares donde quiero buscar la encoding:

  • parámetro charset en el encabezado de Content-type HTTP.
  • elemento en el de una página web para documentos HTML.
  • atributo de encoding en el prólogo XML para documentos XML.
  • Detecta automáticamente la encoding de caracteres como último recurso.

Básicamente, quiero poder buscar en todos esos lugares y también tratar con información conflictiva de forma automática.

¿Hay tal biblioteca por ahí o debo escribirla yo mismo?

BeautifulSoup (el analizador html) incorpora una clase llamada UnicodeDammit que hace precisamente eso. Eche un vistazo y vea si le gusta.

BeautifulSoup ‘s UnicodeDammit , que a su vez utiliza chardet .

chardet en sí mismo es bastante útil para el caso general (determinar la encoding del texto) pero lento como dices. UnicodeDammit agrega funciones adicionales en la parte superior de chardet , en particular, que puede buscar la encoding explícitamente especificada en las tags de encoding de XML.

En cuanto al Content-type HTTP Content-type , creo que debe leerlo usted mismo para extraer el parámetro charset y luego pasarlo a UnicodeDammit en el parámetro fromEncoding .

En cuanto a la resolución de conflictos, UnicodeDammit dará prioridad a la encoding explícitamente establecida (si la encoding no genera errores). Ver los documentos para más detalles.