2012-02-10 19 views
192

Estoy tratando de obtener un programa de Python 3 para realizar algunas manipulaciones con un archivo de texto lleno de información. Sin embargo, al intentar leer el archivo me sale el siguiente error:UnicodeDecodeError: el códec 'charmap' no puede decodificar el byte X en la posición Y: mapas de caracteres a <undefined>

Traceback (most recent call last): 
File "SCRIPT LOCATION", line NUMBER, in <module> 
text = file.read() 
File "C:\Python31\lib\encodings\cp1252.py", line 23, in decode 
return codecs.charmap_decode(input,self.errors,decoding_table)[0] 
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 2907500: character maps to <undefined> 

Si alguien me podría dar ninguna ayuda para tratar de superar este problema estaría muy agradecido.

Gracias!

+0

Por el mismo error de estas soluciones me ha ayudado, [solución del error charmap] (https://stackoverflow.com/questions/12468179/unicodedecodeerror-utf8-codec-cant-decode-byte-0x9c) –

Respuesta

326

El archivo en cuestión no utiliza la codificación CP1252. Está usando otra codificación. Cuál tienes que resolver tú mismo. Los más comunes son Latin-1 y UTF-8. Como 0x90 en realidad no significa nada en Latin-1, UTF-8 (donde 0x90 es un byte de continuación) es más probable.

Se especifica la codificación cuando se abre el archivo:

file = open(filename, encoding="utf8") 
+8

Genial, tuve ese problema con el código de Python 2.7 que traté de ejecutar en Python 3.4. ¡Latin-1 funcionó para mí! – 1vand1ng0

+3

Gracias @ 1vand1ng0 utf-8 no funcionó para mí, pero Latin-1 hizo – Lucas

+2

si está usando Python 2.7, y obteniendo el mismo error, pruebe el módulo 'io':' io.open (filename, encoding = "utf8 ")' – christopherlovell

15

Como una extensión a @LennartRegebro respuesta:

Si no se puede saber qué codificación es y solución anterior no funciona (no es utf8) y se encontró simplemente adivinando: hay online tools que podría usar para identificar qué codificación es esa. No son perfectos, pero generalmente funcionan bien. Después de descifrar la codificación, debería poder usar la solución anterior.

EDIT: (Copiado de comentario)

Un editor de texto muy popular Sublime Text tiene un comando para mostrar la codificación si se ha establecido ...

  1. Ir a View ->Show Console (o Ctrl + `)

enter image description here

  1. Tipo en el campo en la parte inferior view.encoding() y esperar lo mejor (no he podido conseguir nada, pero Undefined pero tal vez a tener mejor suerte ...)

enter image description here

+0

Algunos editores de texto proporcionarán esta información también. Sé que con vim puedes obtener esto a través de ': set fileencoding' ([desde este enlace] (http://superuser.com/questions/28779/how-do-i-find-the-encoding-of-the- current-buffer-in-vim)) – PaxRomana99

+2

Sublime Text, también abre la consola y escribe 'view.encoding()'. – JimmidyJoo

Cuestiones relacionadas