UnicodeEncodeError: el codec ‘charmap’ no puede codificar problemas de caracteres …

Antes de que alguien me diga que me lo han preguntado mil millones de veces, tenga en cuenta que he intentado varias de las respuestas en muchos temas, pero ninguna de ellas pareció funcionar correctamente para mi problema.

import json def parse(fn): results = [] with open(fn) as f: json_obj = json.loads(open(fn).read()) for r in json_obj["result"]: print(r["name"]) parse("wine.json") 

Básicamente estoy abriendo un archivo json e iterándolo para algunos valores. Obviamente, cada vez que leo un valor con algún código Unicode en él, obtengo este error.

 Traceback (most recent call last): File "json_test.py", line 9, in  parse("wine.json") File "json_test.py", line 7, in parse print(r["name"]) File "C:\Python34\lib\encodings\cp850.py", line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_map)[0] UnicodeEncodeError: 'charmap' codec can't encode character '\u201c' in position 15: character maps to  

Como la gente dijo en otros subprocesos, he intentado codificarlo y todo eso, pero luego me sale un error similar, no importa cómo lo codifique o decodifique. Por favor ayuda.

Todo está bien hasta el punto en el que intenta imprimir la cadena. Para imprimir una cadena, primero se debe convertir de Unicode puro a las secuencias de bytes compatibles con su dispositivo de salida. Esto requiere una encode para el conjunto de caracteres adecuado, que Python ha identificado como cp850 , el valor predeterminado de la Consola de Windows.

A partir de Python 3.4, puede configurar la consola de Windows para que use UTF-8 con el siguiente comando emitido en el símbolo del sistema:

 chcp 65001 

Esto debería solucionar su problema, siempre y cuando haya configurado la ventana para usar una fuente que contenga el carácter.

A partir de Python 3.6, esto ya no es necesario: Windows siempre ha tenido una interfaz Unicode completa para la consola, y Python ahora la usa en lugar de la E / S de la página de códigos primitivos. Unicode a la consola simplemente funciona .

Lo que terminé haciendo como una posible solución temporal (dependiendo de si alguien tiene una mejor respuesta) estaba usando Unidecode . Desafortunadamente, perdí todos los acentos, pero tal vez alguien tenga una solución para eso.