json.dump – UnicodeDecodeError: el códec ‘utf8’ no puede decodificar el byte 0xbf en la posición 0: el byte de inicio no es válido

Tengo un diccionario de data donde he almacenado:

Ahora, quiero escribir este mapa en un archivo json. Intenté con esto:

 with open('events_map.json', 'w') as out_file: json.dump(data, out_file, indent = 4) 

pero esto me da el error:

UnicodeDecodeError: el codec ‘utf8’ no puede decodificar el byte 0xbf en la posición 0: el byte de inicio no es válido

Ahora, también probé con:

 with io.open('events_map.json', 'w', encoding='utf-8') as out_file: out_file.write(unicode(json.dumps(data, encoding="utf-8"))) 

pero esto plantea el mismo error:

UnicodeDecodeError: el codec ‘utf8’ no puede decodificar el byte 0xbf en la posición 0: el byte de inicio no es válido

También probé con:

 with io.open('events_map.json', 'w', encoding='utf-8') as out_file: out_file.write(unicode(json.dumps(data, encoding="utf-8", ensure_ascii=False))) 

pero esto plantea el error:

UnicodeDecodeError: el codec ‘ascii’ no puede decodificar el byte 0xbf en la posición 3114: ordinal no está en el rango (128)

¿Alguna sugerencia sobre cómo puedo resolver este problema?

EDITAR: Creo que esta es la línea que me está causando el problema:

 > data['142'] '\xbf/ANCT25' 

EDIT 2: data variable de data se lee desde un archivo. Entonces, después de leerlo de un archivo:

 data_file_lines = io.open(file_name, 'r', encoding='utf8').readlines() 

Entonces hago

 with io.open('data/events_map.json', 'w', encoding='utf8') as json_file: json.dump(data, json_file, ensure_ascii=False) 

Lo que me da el error:

TypeError: debe ser unicode, no str

Entonces, trato de hacer esto con el diccionario de datos:

 for tuple in sorted_tuples (the `data` variable is initialized by a tuple): data[str(tuple[1])] = json.dumps(tuple[0], ensure_ascii=False, encoding='utf8') 

que es, de nuevo, seguido por:

 with io.open('data/events_map.json', 'w', encoding='utf8') as json_file: json.dump(data, json_file, ensure_ascii=False) 

Pero de nuevo, el mismo error:

 TypeError: must be unicode, not str 

Recibo el mismo error cuando uso la función de open simple para leer del archivo:

 data_file_lines = open(file_name, "r").readlines() 

La excepción es causada por el contenido de su diccionario de data , al menos una de las claves o valores no está codificada en UTF-8.

Tendrás que reemplazar este valor; ya sea sustituyendo un valor que está codificado en UTF-8, o decodificándolo en un objeto unicode descodificando solo ese valor con cualquier encoding que sea la encoding correcta para ese valor:

 data['142'] = data['142'].decode('latin-1') 

para decodificar esa cadena como un valor codificado en Latin-1 en su lugar.