我有一个任务,我需要生成一个数据字典的可移植版本,并插入一些额外的字段。我最终构建了一个有点大的Python字典,然后我想将其转换为JSON。但是,当我尝试这种转换时......
with open('CPS14_data_dict.json','w') as f:
json.dump(data_dict,f,indent=4,encoding='utf-8')
我被一个例外打扰:
UnicodeDecodeError: 'utf8' codec can't decode byte 0x92 in position 17: invalid start byte
我知道这是一个常见的错误,但在我的生活中,我不能找到一个如何找到字典中有问题的部分的实例。我见过的唯一可信的事情是将字典转换为字符串并在每个字符上运行ord()
:
for i,c in enumerate(str(data_dict)):
if ord(c)>128:
print i,'|',c
问题是,此操作根本不返回任何内容。我错过了ord()
的工作原理吗?或者,报告位置(17),但我不清楚这是指什么。在第17个字符,行或条目中似乎没有任何问题。
我应该说我知道ensure_ascii=False
选项。实际上,它会写入磁盘(它很漂亮)。然而,这种方法似乎只是推动了未来的发展。当我尝试重新读取文件时,我得到了相同的编码错误。由于我想将此文件用于多种用途(转换回字典),这是一个问题。
这也是有用的,请注意这是我使用Windows 7的工作计算机,所以我没有我的shell工具来浏览文件(我的VM就在fritz上)。
非常感谢任何帮助。