在有人向我提出十倍于此问题的废话之前,请注意我已经在很多线程中尝试了几个答案,但似乎没有一个能够解决我的问题。
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")
我基本上只是打开一个json文件并为某些值迭代它。显然,每当我读取一个包含unicode的值时,我都会收到此错误。
Traceback (most recent call last):
File "json_test.py", line 9, in <module>
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 <undefined>
正如人们在其他主题中所说的那样,我曾试图对其进行编码等等,但无论我如何对其进行编码和/或解码,我都会遇到类似的错误。请帮忙。
答案 0 :(得分:16)
在您尝试打印字符串之前,一切都很好。要打印字符串,必须先将其从纯Unicode转换为输出设备支持的字节序列。这需要encode
到正确的字符集,Python已将其标识为cp850
- Windows控制台的默认设置。
从Python 3.4开始,您可以将Windows控制台设置为使用UTF-8,并在命令提示符处发出以下命令:
chcp 65001
这可以解决您的问题,只要您已将窗口配置为使用包含该字符的字体。
从Python 3.6开始不再需要这个 - Windows一直有一个完整的Unicode接口用于控制台,Python现在用它来代替原始代码页I / O.控制台的Unicode正常工作。
答案 1 :(得分:1)
我最终做的一个可能的临时修复(取决于是否有人有更好的答案)正在使用Unidecode。不幸的是,我失去了所有的口音,但也许有人有解决方法。