【问题标题】:UnicodeEncodeError: 'charmap' codec can't encode character... problemsUnicodeEncodeError: 'charmap' codec can't encoding character... 问题
【发布时间】:2014-09-27 11:21:16
【问题描述】:

在有人问我十亿次这个问题之前,请注意,我已经在许多线程中尝试了几个答案,但似乎没有一个能正常解决我的问题。

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>

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

【问题讨论】:

  • 问题是您正在打印到无法打印字符的 Windows 控制台。在您在屏幕上出现乱码之前,Python 会为您检测到这一点。
  • 但是当我将字符(即\u201c)粘贴到控制台时,我可以看到它就好了吗?
  • 看一下cp850,字符不在。当我尝试将它粘贴到我的系统上时,它会被 " 替换。
  • 我明白了。你会建议我做什么?
  • 我已经以答案的形式留下了我的建议。

标签: python json python-3.x unicode


【解决方案1】:

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

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

chcp 65001

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

Python 3.6 开始,这不再是必需的——Windows 一直有一个完整的 Unicode 控制台接口,Python 现在使用它来代替原始代码页 I/O。 Unicode 到控制台正常工作

【讨论】:

    【解决方案2】:

    我最终做的一个可能的临时修复(取决于是否有人有更好的答案)是使用Unidecode。不幸的是,我失去了所有的口音,但也许有人可以解决这个问题。

    【讨论】:

      猜你喜欢
      • 2018-04-18
      • 2015-12-01
      • 2017-05-10
      • 2020-08-05
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      相关资源
      最近更新 更多