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

时间:2014-08-04 21:34:11

标签: python json python-3.x unicode

在有人向我提出十倍于此问题的废话之前,请注意我已经在很多线程中尝试了几个答案,但似乎没有一个能够解决我的问题。

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>

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

2 个答案:

答案 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。不幸的是,我失去了所有的口音,但也许有人有解决方法。