Encontrar el texto que tiene una codificación de caracteres no estándar es un paso muy común en el procesamiento de texto.
Idealmente, todo el texto habría sido de codificación utf-8 o ASCII, pero es posible que este no sea siempre el caso. Por lo tanto, en los casos en que no se conoce la codificación, dicho texto no codificado debe detectarse y convertirse a una codificación estándar. Por lo tanto, este paso es importante antes de seguir procesando el texto.
Instalación de Charade:
para realizar la detección y conversión de codificación, se requiere charade : una biblioteca de Python. Este módulo se puede instalar simplemente usando sudo easy_install charade o pip install charade.
Veamos la función de envoltorio alrededor del módulo de farsa.
Código: encoding.detect(string), para detectar la codificación
Python3
# -*- coding: utf-8 -*- import charade def detect(s): try: # check it in the charade list if isinstance(s, str): return charade.detect(s.encode()) # detecting the string else: return charade.detect(s) # in case of error # encode with 'utf -8' encoding except UnicodeDecodeError: return charade.detect(s.encode('utf-8'))
Las funciones de detección devolverán 2 atributos:
Confidence : the probability of charade being correct. Encoding : which encoding it is.
Código: encoding.convert(string) para convertir la codificación.
Python3
# -*- coding: utf-8 -*- import charade def convert(s): # if in the charade instance if isinstance(s, str): s = s.encode() # retrieving the encoding information # from the detect() output encode = detect(s)['encoding'] if encode == 'utf-8': return s.decode() else: return s.decode(encoding)
Código: Ejemplo
Python3
# importing library import encoding d1 = encoding.detect('geek') print ("d1 is encoded as : ", d1) d2 = encoding.detect('ascii') print ("d2 is encoded as : ", d2)
Producción :
d1 is encoded as : (confidence': 0.505, 'encoding': 'utf-8') d2 is encoded as : ('confidence': 1.0, 'encoding': 'ascii')
detect() : es un envoltorio charade.detect() . Codifica las strings y maneja las excepciones UnicodeDecodeError. Espera un objeto de bytes, por lo que la string se codifica antes de intentar detectar la codificación.
convert() : es un envoltorio charade.convert() . Primero llama a detect() para obtener la codificación. Luego, devuelve una string decodificada.
Publicación traducida automáticamente
Artículo escrito por mathemagic y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA