Python 获取UnicodeDecodeError加载包含中文的JSON文件

Python 获取UnicodeDecodeError加载包含中文的JSON文件,python,Python,我正在尝试加载一个json文件。文件内容为中文。我收到UnicodeDecodeError:utf-8。除了不丢失文件中的所有内容外,是否有其他方法可以使用try def load_from_json(fin): datas = [] for line in fin: data = json.loads(line) datas.append(data) return datas 错误截图 这可能是字符编码的一个潜在问题。有一个名为ftfy

我正在尝试加载一个json文件。文件内容为中文。我收到
UnicodeDecodeError:utf-8
。除了不丢失文件中的所有内容外,是否有其他方法可以使用try

def load_from_json(fin):
    datas = []
    for line in fin:
        data = json.loads(line)
        datas.append(data)
    return datas
错误截图


这可能是字符编码的一个潜在问题。有一个名为ftfy(为您修复)的库,它可以自动检测和修复您的字符编码:


根据另一个答案,看起来文件实际上可能不是utf8,因此这确实是一个很好的开始。然而,为了回答你的实际问题

除了不丢失文件中的所有内容外,是否有其他方法可以使用try

def load_from_json(fin):
    datas = []
    for line in fin:
        data = json.loads(line)
        datas.append(data)
    return datas
是的,有两种方法:一种是设置
encoding=“utf8”
,另一种是设置
errors=“replace”
。然后你会得到一个替换字符U+FFFD(�) 然后你尝试/除了json加载,然后从那里开始。这可能是最简单的,但对于长期的事情来说也不是一个很好的解决方案

更好的方法是以二进制模式打开文件,然后逐行解码,比如

def load_from_json(fin):
数据=[]
对于i,枚举(fin)中的行:
尝试:
data=json.load(line.decode(“utf8”))
除UNICEDECODEDEERROR外,错误为e:
打印(f“line{i},{line!r}:{e}”,file=sys.stderr)
其他:
data.append(数据)
返回数据

您能告诉我们这些数据是从哪里得到的吗?如果您不知道编码可能是什么,请尝试一下文件内容。
chardet
以什么方式获得的?(以及,您是否检查了文件的编码?)