为何json.loads()使用encoding='utf-8-sig'无效?KeyError问题排查
问题原因及解决办法
错误1:
json.loads()不支持encoding参数
Python 3的json.loads()处理的是Unicode字符串,根本不存在encoding参数(这个参数是Python 2的遗留内容)。你第二个try块里加这个参数不仅完全无效,还会导致JSON解析失败,最后file_data还是初始的空字典{},后续访问file_data['name']自然触发KeyError。错误2:读取文件时未处理UTF-8 BOM
用默认方式打开文件时,系统默认编码会把UTF-8 BOM的字节(\xef\xbb\xbf)转成乱码字符,导致JSON解析器无法识别开头的有效JSON结构,直接解析失败。
修正后的代码
import json file_data = {} # 打开文件时指定encoding='utf-8-sig',自动去除BOM标记 with open(path, encoding='utf-8-sig') as open_file: data = open_file.read() try: file_data = json.loads(data) print(file_data['name']) # 现在可正常访问name字段 except json.JSONDecodeError as e: print(f"JSON解析失败: {e}")
说明
用utf-8-sig编码打开文件时,Python会自动识别并移除开头的UTF-8 BOM标记,读出来的data是干净的JSON字符串,直接用json.loads()就能解析成正常的字典,不会再出现解析失败或KeyError问题。
内容的提问来源于stack exchange,提问作者vinter5
相关产品推荐
相关产品推荐

