如何解决FormatException: Unexpected extension byte(偏移量37)错误?
解决FormatException: Unexpected extension byte (UTF-8解码错误)
这个错误本质是JSON文件的UTF-8编码不规范,或是文件包含无效字节,导致解析器无法正确解码。以下是具体排查和解决步骤:
1. 检查并修正JSON文件编码
- 用VS Code、Notepad++等编辑器打开文件,查看当前编码:
- VS Code:点击右下角编码标识,切换为
UTF-8(建议选不带BOM的UTF-8) - Notepad++:菜单栏「编码」→ 选择「转为UTF-8编码」后重新保存
- VS Code:点击右下角编码标识,切换为
- 避免使用GBK、ASCII等非UTF-8编码保存JSON文件。
2. 定位并修复无效字节
错误提示的offset 37是字节偏移位置(多数工具从0开始计数):
- 用十六进制编辑器打开文件,找到对应偏移的字节,检查是否存在乱码、特殊控制字符等非UTF-8内容
- 删除或替换无效字符,确保文件内容符合UTF-8编码规范。
3. 代码中明确指定编码解析
如果文件实际编码不是UTF-8(比如UTF-16),读取时直接指定对应编码:
Dart/Flutter示例
import 'dart:io'; import 'dart:convert'; void main() async { final file = File('target.json'); // 根据文件实际编码调整,比如utf16、latin1等 final content = await file.readAsString(encoding: utf16); final jsonData = jsonDecode(content); print(jsonData); }
Python示例
import json # 指定文件实际编码 with open('target.json', 'r', encoding='utf-16') as f: data = json.load(f) print(data)
4. 验证JSON语法有效性
- 用编辑器的JSON校验插件检查文件是否存在语法错误(比如引号不闭合、逗号误用等),这类问题也可能触发编码相关的异常
- 如果文件是网络下载的,重新下载一次,排除传输过程中文件损坏的可能。
内容的提问来源于stack exchange,提问作者Shubham Gupta
相关产品推荐
相关产品推荐

