UnicodeEncodeError:'charmap'编解码器无法编码字符...问题

Tum*_*Bit 4 python unicode json python-3.x

在有人给我几十亿次这个问题的废话之前,请注意我已经在很多线程中尝试了几个答案但是它们似乎都没有适合我的问题.

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")
Run Code Online (Sandbox Code Playgroud)

我基本上只是打开一个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>
Run Code Online (Sandbox Code Playgroud)

正如人们在其他线程中所说的那样,我试图对它进行编码等等,但无论我如何编码和/或解码,我都会遇到类似的错误.请帮忙.

Mar*_*som 16

一切都很好,直到你尝试打印字符串.要打印字符串,必须先将其从纯Unicode转换为输出设备支持的字节序列.这需要一个encode正确的字符集,Python已将其识别为cp850- Windows控制台默认设置.

从Python 3.4开始,您可以将Windows控制台设置为使用UTF-8,并在命令提示符处发出以下命令:

chcp 65001
Run Code Online (Sandbox Code Playgroud)

这应该可以解决您的问题,只要您已将窗口配置为使用包含该字符的字体即可.

Python 3.6开始,这不再是必需的 - Windows总是有一个完整的Unicode接口用于控制台,Python现在使用它代替原始代码页I/O. Unicode到控制台就可以了.