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
Crear una función
def utf_8_encoder(unicode_csv_data): for line in unicode_csv_data: yield line.encode(''utf-8'')
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'')