JSON配置文件的UTF-8 BOM编码陷阱

JSON 配置文件的 UTF-8 BOM 编码陷阱------技术复盘

问题现象

autoglm-browser-service 启动后读取 config.json 静默失败,服务运行正常但所有浏览器相关功能无法使用,日志里没有任何明显错误。

排查过程

  1. 第一反应:配置文件路径错误? → 检查后发现路径正确,文件存在
  2. 怀疑 JSON 格式不对 → 用 VSCode/在线 JSON 校验器检查,格式完全合法
  3. 怀疑权限问题 → 检查文件权限,当前用户完全可读可写
  4. 用 Hex 编辑器查看文件 → 发现文件以 EF BB BF(UTF-8 BOM)开头
  5. 对比正常工作的配置文件 → 没有 BOM 头

根因

Windows 下 PowerShell 的 Set-Content -Encoding UTF8 默认会写入 UTF-8 BOM (字节序标记 0xEFBBBF)。autoglm-browser-service 的 JSON 解析器(Go/Python 极简实现)没有处理 BOM,直接按纯文本读,导致第一个字符是 BOM 而非 {,JSON 解析失败,且因为默认静默 fail 而不报错。

解决方案

powershell 复制代码
# ❌ 错误(默认带 BOM)
$json | Set-Content "config.json" -Encoding UTF8

# ✅ 正确(无 BOM)
$json | Out-File -FilePath "config.json" -Encoding ascii -NoNewline

核心原则:Windows 环境写入 JSON 配置时强制使用 ASCII 编码(无 BOM),确保跨语言/跨平台兼容。

复盘总结

  1. BOM 是 Windows 生态的老坑:历史原因 UTF-8 BOM 在 Windows 上很常见,但绝大多数非微软系的工具(Go、Python、Node)不处理 BOM
  2. 静默失败是最坏的失败:如果解析器能报一个明确的 "unexpected BOM" 错误,排查时间从 2 小时缩短到 2 分钟
  3. 教训:跨语言系统集成时,文本文件的编码约定必须显式声明,不能依赖平台的默认行为
  4. 排查技巧:遇到"文件明明存在且内容正确就是不生效"的诡异问题时,第一时间用 Hex 编辑器看原始字节,远比肉眼检查有用

积累 +1。每天一个小知识点,一年后就是 365 个。💪

#技术复盘 #UTF-8 #BOM #编码陷阱 #PowerShell #JSON

相关推荐
用户7783366132118 小时前
SERP API JSON Schema 演进版本管理实战
json·api
赵庆明老师2 天前
Vben精讲:21-详解web-antd:tsconfig.json
前端·json·vim
红叶舞3 天前
成数据绑定对象,在应用程序中处理完数据后,将更新的数据序列化为JSON传回远端服务器,很多移动应用使用了这种模式处理服务器端的数据。 ...
运维·服务器·json
name好难取诶4 天前
解析请求体内容(如 JSON、表单数据、XML 等) 将原始数据转换为 Python 数据结构 使转换后的数据可在 request. ...
xml·python·json
gcw10244 天前
JSONMe 简觅JSON 工具
json·json格式化·json可视化·json美化·json校验·好用的json工具·json编辑
北北牌屈四巴格!4 天前
whistle自定义修改接口返回值内容
前端·json
SQDN5 天前
Chatbox 1.22.1 获取不到模型?先验 /models,再对齐精确 model ID
人工智能·测试工具·机器学习·chatgpt·json
SunnyDays10115 天前
Python 将 Excel(XLS/XLSX)转换为 JSON:导出工作簿、工作表、单元格区域与自定义 JSON 结构
python·json·excel·excel 转 json·导出 excel 到 json·xlsx 转 json·xls 转 json
刘小八5 天前
Spring AI 结构化输出:稳定生成可校验的业务 JSON
人工智能·spring·json
CodexDave6 天前
Python 自动化接单实战(一):把 CSV 需求做成配置驱动解析器
java·python·自动化·json·数据清洗·python自动化·csv处理