根本原因是 composer.json 含 utf-8 bom(ef bb bf),导致 php json_decode() 解析失败;需用 hexdump 或 powershell 检查字节,再以 utf-8(无 bom)保存或命令行清除。

Composer 报错 Could not parse composer.json 且提示编码问题
根本原因几乎总是 composer.json 文件含有 UTF-8 BOM(Byte Order Mark)。Composer 内部使用 PHP 的 json_decode(),而该函数对 BOM 非常敏感——哪怕开头只有 invisible 的 EF BB BF 三个字节,也会直接报解析失败,错误信息却不会明说“BOM”二字。
如何快速确认并清除 BOM
别靠眼睛看,也别信编辑器右下角显示的“UTF-8”字样——很多编辑器(如 VS Code、Sublime)默认保存带 BOM,尤其在 Windows 下更常见。用命令行验证最可靠:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- Linux/macOS:
head -n1 composer.json | hexdump -C,如果开头是ef bb bf,就是 BOM - Windows PowerShell:
Get-Content composer.json -Encoding Byte -TotalCount 3,输出239 187 191即为 BOM - 清除方法:用 VS Code 打开 → 右下角点击编码格式 → 选
Save with Encoding→ 选UTF-8(注意不是UTF-8 with BOM) - 或用命令行工具:
sed -i '1s/^\xEF\xBB\xBF//' composer.json(Linux/macOS)
哪些编辑器容易偷偷加 BOM
Notepad(Windows 自带)必加;VS Code 在「文件 → 另存为」时若未手动选编码,可能沿用旧 BOM;Sublime Text 3 默认保存为 UTF-8 with BOM;记事本++ 默认无 BOM,但若从带 BOM 文件复制粘贴过,也可能继承。
- 推荐做法:在 VS Code 中安装插件
Remove BOM,一键清理;或全局设置"files.encoding": "utf8"(不含withBOM) - CI/CD 流水线中建议加校验步骤,例如用
file composer.json检查是否含with BOM字样 - Git 提交前可配置
core.autocrlf=false+core.safecrlf=true,减少换行与编码交叉干扰
为什么不用其他编码(比如 GBK、ISO-8859-1)
Composer 文档明确要求 composer.json 必须是 UTF-8 编码,且不支持任何变体(包括 BOM)。PHP 的 json_decode() 在非 UTF-8 输入下会直接返回 null,而 Composer 不做编码转换,只原样传入。
- 即使文件里全是英文,用 GBK 保存也会报错,因为 JSON 规范本身基于 Unicode
- 某些中文路径或包名含 emoji 时,只有 UTF-8 能完整表示;BOM 是唯一常见但隐蔽的破坏点
- 不要尝试用
iconv或recode转码——只要结果含 BOM,照样失败
composer.json 里不是“可有可无”,而是“有就废”。检查和清理必须落到字节层面,不能依赖编辑器界面提示。










