Python | Codificación de caracteres

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *