utf8 unicodeencodeerror español python character-encoding

unicodeencodeerror - unicode to utf8 python



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

Estoy tratando de usar el Detector de codificación universal (chardet) en Python para detectar la codificación 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 codificación de caracteres de las páginas web, he encontrado un example de cómo se usa en archivos de texto individuales.

Sin embargo, no puedo averiguar cómo decirle al script que establezca la codificación 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 documentation 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 codificación 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.