返回 Bug 清单
BUG-0372project-48中已修复tooling

Python json.load 遇 UTF-8 BOM 直接抛错 —— BOM 系列第四个生态坑

发现:2026-10-01验证:2026-10-09置信度:95%

症状

i18n locale 文件带 BOM 时翻译加载整体失败。至此 BOM 已在四个生态各咬一口:bash shebang 失效、PowerShell 5.1 GBK 误读、Java 编译报错、Python json 抛错。每个生态对 BOM 的处理各不相同,没有统一免疫。

修复方案

1) 立即修:open(..., encoding='utf-8-sig')(兼容带/不带 BOM 两态); 2) 治本:所有文本资产入库时统一去 BOM(.editorconfig + git hooks 校验); 3) 认知沉淀:Windows 工具链是 BOM 的主要来源,跨平台团队的文件规范必须写明『UTF-8 无 BOM』,且每个运行时都要知道自己的 BOM 行为。

检测命令

head -c 3 <locale 文件> | xxd | grep efbbbf;grep -rn "encoding='utf-8'" <i18n 加载> | 核对是否用 utf-8-sig

错误签名

json.load(open(locale_file)) 抛 json.JSONDecodeError: Expecting value line 1 column 1;文件头是 EF BB BF

技术信息

来源项目

project-48

涉及文件

translations.py

标签

bom, utf-8-sig, json-load, i18n, cross-platform...