微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

json.dump-UnicodeDecodeError:'utf8'编解码器无法解码位置0的字节0xbf:无效的起始字节

如何解决json.dump-UnicodeDecodeError:'utf8'编解码器无法解码位置0的字节0xbf:无效的起始字节

例外是由您的data字典内容引起的,其中至少 一个 键或值 未采用 UTF-8编码。

您将不得不替换该值;通过替换 UTF-8编码的值,或通过使用unicode对该值的正确编码进行的任何编码来对该值进行解码,从而将其解码为对象:

data['142'] = data['142'].decode('latin-1')

将该字符串解码为Latin-1编码值。

解决方法

我有一本data存储的字典:

  • key -事件ID

  • value-此事件的名称,其中value是UTF-8字符串

现在,我想将此映射记下为json文件。我尝试了这个:

with open('events_map.json','w') as out_file:
    json.dump(data,out_file,indent = 4)

但这给了我错误:

UnicodeDecodeError:’utf8’编解码器无法解码位置0的字节0xbf:无效的起始字节

现在,我还尝试了:

with io.open('events_map.json','w',encoding='utf-8') as out_file:
   out_file.write(unicode(json.dumps(data,encoding="utf-8")))

但这会引发相同的错误:

UnicodeDecodeError:’utf8’编解码器无法解码位置0的字节0xbf:无效的起始字节

我也尝试过:

with io.open('events_map.json',encoding='utf-8') as out_file:
    out_file.write(unicode(json.dumps(data,encoding="utf-8",ensure_ascii=False)))

但这会引发错误:

UnicodeDecodeError:’ascii’编解码器无法解码位置3114的字节0xbf:序数不在范围内(128)

关于如何解决此问题的任何建议?

编辑: 我相信这是导致我问题的行:

> data['142']
'\xbf/ANCT25'

编辑2:data变量被从文件中读取。因此,从文件中读取它之后:

data_file_lines = io.open(file_name,'r',encoding='utf8').readlines()

然后我做:

with io.open('data/events_map.json',encoding='utf8') as json_file:
        json.dump(data,json_file,ensure_ascii=False)

这给了我错误:

TypeError:必须是unicode,而不是str

然后,我尝试使用数据字典来做到这一点:

for tuple in sorted_tuples (the `data` variable is initialized by a tuple):
    data[str(tuple[1])] = json.dumps(tuple[0],ensure_ascii=False,encoding='utf8')

同样,其后是:

with io.open('data/events_map.json',encoding='utf8') as json_file:
    json.dump(data,ensure_ascii=False)

但是同样,同样的错误:

TypeError: must be unicode,not str

当我使用简单的open功能从文件中读取时,出现相同的错误:

data_file_lines = open(file_name,"r").readlines()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。