UnicodeEncodeError: 'charmap' 编解码器无法编码字符... 问题
在这里,我知道这个问题可能被问过很多次,但我想说的是,我已经尝试了很多不同的答案,但都没有解决我的问题。
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 个回答
1
我最后找到的一个可能的临时解决办法(如果有人有更好的答案就另说)是使用 Unidecode 这个工具。可惜的是,我把所有的重音符号都去掉了,但也许有人能找到解决这个问题的方法。
16
在你尝试打印字符串之前,一切都是正常的。要打印字符串,首先需要将它从纯Unicode格式转换成你的输出设备能支持的字节序列。这就需要用到一个叫encode
的过程,把它转换成合适的字符集,而Python默认使用的是cp850
,这是Windows控制台的默认设置。
从Python 3.4开始,你可以通过在命令提示符下输入以下命令来设置Windows控制台使用UTF-8:
chcp 65001
只要你把窗口设置成使用包含该字符的字体,这样做应该能解决你的问题。
从Python 3.6开始,这个步骤就不再必要了——Windows控制台一直都有完整的Unicode支持,而Python现在也在使用这个功能,而不是以前那种简单的代码页输入输出。Unicode在控制台中直接就能用。