只是尝试将此JSON文件(使用非ascii字符)加载为具有Unicode编码的python字典,但仍然出现此错误:
返回codecs.ascii_decode(input,self.errors)[0]
UnicodeDecodeError:' ascii'编解码器不能解码位置90的字节0xc3:序数不在范围内(128)
JSON文件内容="工具提示":{ " dxPivotGrid-sortRowBySummary":"排序\" {0} \" byThisRow",}
import sys
import json
data = []
with open('/Users/myvb/Desktop/Automation/pt-PT.json') as f:
for line in f:
data.append(json.loads(line.encode('utf-8','replace')))
答案 0 :(得分:4)
你有几个问题,尽我所知。首先是文件编码。在未指定编码的情况下打开文件时,将使用sys.getfilesystemencoding()
打开文件。由于这可能会有所不同(特别是在Windows机器上),因此明智地对大多数json文件使用encoding="utf-8"
是一个好主意。由于您的错误消息,我怀疑该文件是使用ascii
编码打开的。
接下来,当文件系统对象读取文件时,文件从utf-8解码为python字符串。 utf-8行已经被解码为字符串,并且已经准备好让json读取。当您执行line.encode('utf-8','replace')
时,您将该行重新编码为bytes
对象,其中json loads
(即"加载字符串")无法处理
最后,"tooltip":{ "navbar":"Operações de grupo"}
不是有效的json,但它看起来像一个包含单个json对象的漂亮打印的json文件的一行。我的猜测是你应该将整个文件读作1 json对象。
总结你得到:
import json
with open('/Users/myvb/Desktop/Automation/pt-PT.json', encoding="utf-8") as f:
data = json.load(f)
从名称来看,该文件可能被编码为Windows葡萄牙语代码页。如果是这样,"cp860"
编码可能会更好。
答案 1 :(得分:0)
我遇到了同样的问题,对我有用的是创建正则表达式,并解析json文件中的每一行:
REGEXP = '[^A-Za-z0-9\'\:\.\;\-\?\!]+'
new_file_line = re.sub(REGEXP, ' ', old_file_line).strip()
答案 2 :(得分:0)
如果文件的内容与您的内容相似,我可以通过一个简单的镜头阅读该文件:
>>> import json
>>> fname = "data.json"
>>> with open(fname) as f:
... data = json.load(f)
...
>>> data
{'tooltip': {'navbar': 'Operações de grupo'}}