python python-2.7

python - UnicodeDecodeError: el códec ''ascii'' no puede decodificar el byte 0xe2 en la posición 13: el ordinal no está dentro del rango(128)



python-2.7 (6)

El archivo se lee como un grupo de str s, pero debe ser unicode s. Python intenta convertir implícitamente, pero falla. Cambio:

job_titles = [line.strip() for line in title_file.readlines()]

para decodificar explícitamente las str s para unicode (aquí asumiendo UTF-8):

job_titles = [line.decode(''utf-8'').strip() for line in title_file.readlines()]

También podría resolverse importando el módulo de codecs y utilizando codecs.open lugar del built-in open .

Estoy usando NLTK para realizar clusters kmeans en mi archivo de texto en el que cada línea se considera como un documento. Entonces, por ejemplo, mi archivo de texto es algo como esto:

pertenecer golpe de muerte de dedo
apresurado
mike paredes apresuradas jericho
reglas jägermeister
reglas bandas siguen realizando jägermeister etapa
enfoque

Ahora el código de demostración que intento ejecutar es este: https://gist.github.com/xim/1279283

El error que recibo es este:

Traceback (most recent call last): File "cluster_example.py", line 40, in words = get_words(job_titles) File "cluster_example.py", line 20, in get_words words.add(normalize_word(word)) File "", line 1, in File "/usr/local/lib/python2.7/dist-packages/nltk/decorators.py", line 183, in memoize result = func(*args) File "cluster_example.py", line 14, in normalize_word return stemmer_func(word.lower()) File "/usr/local/lib/python2.7/dist-packages/nltk/stem/snowball.py", line 694, in stem word = (word.replace(u"/u2019", u"/x27") UnicodeDecodeError: ''ascii'' codec can''t decode byte 0xe2 in position 13: ordinal not in range(128)

¿Que está sucediendo aquí?


Esto funciona bien para mi.

f = open(file_path, ''r+'', encoding="utf-8")

Puede agregar una tercera codificación de parámetro para garantizar que el tipo de codificación sea ''utf-8''

Nota: este método funciona bien en Python3, no lo intenté en Python2.7.


Para mí hubo un problema con la codificación del terminal. Agregar UTF-8 a .bashrc resolvió el problema:

export LC_CTYPE=en_US.UTF-8

No olvide volver a cargar .bashrc:

source ~/.bashrc


Para python 3, la codificación predeterminada sería "utf-8". Los siguientes pasos se sugieren en la documentación básica: https://docs.python.org/2/library/csv.html#csv-examples en caso de algún problema

  1. Crear una función

    def utf_8_encoder(unicode_csv_data): for line in unicode_csv_data: yield line.encode(''utf-8'')

  2. Luego use la función dentro del lector, por ejemplo

    csv_reader = csv.reader(utf_8_encoder(unicode_csv_data))


Puede probar esto antes de usar la cadena de los job_titles :

source = unicode(job_titles, ''utf-8'')


Puedes probar esto también:

import sys reload(sys) sys.setdefaultencoding(''utf8'')