En Python 3, pasar a un valor apropiado errors=
(como errors=ignore
o errors=replace
) en la creación de su objeto de archivo (suponiendo que sea una subclase de io.TextIOWrapper
- y si no es así, considere envolverlo en uno!); Además, considere aprobar una codificación más probable que charmap
(cuando no esté seguro, utf-8
siempre es un buen lugar para comenzar).
Por ejemplo:
f = open('misc-notes.txt', encoding='utf-8', errors='ignore')
En Python 2, la operación read()
simplemente devuelve bytes; el truco, entonces, es decodificarlos para meterlos en una cadena (si lo hace, de hecho, quiere caracteres en oposición a los bytes). Si usted no tiene una mejor conjetura para su codificación real:
your_string.decode('utf-8', 'replace')
... para reemplazar caracteres no controlada, o
your_string.decode('utf-8', 'ignore')
simplemente ignorarlos.
Dicho esto, sería preferible encontrar y usar su codificación real (en lugar de adivinar utf-8
).
Esto varía un _lot_ según los detalles. Python 2? Python 3? ¿Estás intentando descifrar cadenas que ya leíste? ¿Cómo? Etc. –
Python 3. Estoy usando readlines() – Bob
Okay: actualicé la pregunta para especificar Python 3. Unicode es uno de los lugares donde hay grandes diferencias entre 2 y 3; por favor asegúrese de especificar la versión explícitamente en el futuro. –