UnicodeDecodeError: 当读取的 json 包含中文时,'gbk' 编解码器无法解码字节

cqc*_*991 7 python unicode json utf-8

我正在从 Python 2 切换到 3

在我的 jupyter 笔记本中,代码是

file = "./data/test.json" 
with open(file) as data_file:    
    data = json.load(data_file)
Run Code Online (Sandbox Code Playgroud)

以前用python 2没问题,但现在切换到python 3后,它给了我错误

UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 123: illegal multibyte sequence
Run Code Online (Sandbox Code Playgroud)

test.json文件是这样的:

[{
    "name": "Daybreakers",
    "detail_url": "http://www.movieinsider.com/m4120/daybreakers/",
    "movie_tt_id": "??"
  }]
Run Code Online (Sandbox Code Playgroud)

如果我把中文删掉,就不会有错误了。

所以我该怎么做?

SO中有很多类似的问题,但我没有找到适合我的案例的好的解决方案。如果你找到一个适用的,请告诉我,我会关闭这个。

非常感谢!

PM *_*ing 7

打开文件时需要指定正确的编码。如果 JSON 是用 UTF-8 编码的,你可以这样做:

import json

fname = "test.json" 
with open(fname, encoding='utf-8') as data_file:    
    data = json.load(data_file)

print(data)
Run Code Online (Sandbox Code Playgroud)

输出

[{'name': 'Daybreakers', 'detail_url': 'http://www.movieinsider.com/m4120/daybreakers/', 'movie_tt_id': '??'}]
Run Code Online (Sandbox Code Playgroud)