如何解决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 举报,一经查实,本站将立刻删除。