Detección de caracteres en un archivo de texto en Python utilizando el Detector de encoding universal (chardet)

Estoy tratando de usar el Detector de encoding universal (chardet) en Python para detectar la encoding de caracteres más probable en un archivo de texto (‘infile’) y usarlo en el procesamiento posterior.

Si bien Chardet está diseñado principalmente para detectar la encoding de caracteres de las páginas web, he encontrado un ejemplo de cómo se usa en archivos de texto individuales.

Sin embargo, no puedo averiguar cómo decirle al script que establezca la encoding de caracteres más probable para la variable ‘charenc’ (que se usa varias veces a lo largo del script).

Mi código, basado en una combinación del ejemplo mencionado anteriormente y la documentación propia de Chardet es el siguiente:

import chardet rawdata=open(infile,"r").read() chardet.detect(rawdata) 

La detección de caracteres es necesaria a medida que el script continúa ejecutando lo siguiente (así como varios usos similares):

     inF=open(infile,"rb") s=unicode(inF.read(),charenc) inF.close() 

    Cualquier ayuda sería muy apreciada.

    chardet.detect() devuelve un diccionario que proporciona la encoding como el valor asociado con la clave 'encoding' . Así que puedes hacer esto:

     import chardet rawdata = open(infile, 'rb').read() result = chardet.detect(rawdata) charenc = result['encoding'] 

    La documentación de chardet no está explícitamente clara acerca de si las cadenas de texto y / o las cadenas de bytes funcionan chardet con el módulo, pero es lógico que si tiene una cadena de texto no necesita ejecutar la detección de caracteres en él, por lo que Probablemente debería pasar cadenas de bytes. De ahí el indicador de modo binario ( b ) en la llamada a open() . Pero chardet.detect() también podría funcionar con una cadena de texto dependiendo de las versiones de Python y de la biblioteca que esté utilizando, es decir, si omite la b , podría encontrar que funciona de todos modos, aunque técnicamente esté haciendo algo. incorrecto.