composer 解析 composer.json 时若非 utf-8 编码会报 json decode error: syntax error 或 file could not be loaded,主因是 bom 头、gbk 混入或控制字符;可用 file -i、hexdump -c 和 grep -p 快速检测;编辑器需禁用 utf-8 with bom;ci 中应通过 .gitattributes 和编码校验防范。

composer.json 文件被识别为非 UTF-8 时会报什么错
Composer 本身不校验 composer.json 的编码,但 PHP 的 json_decode() 在解析时会直接失败。常见现象是执行 composer install 或 composer update 时抛出:JSON decode error: Syntax error,或更模糊的 file could not be loaded —— 实际根源往往是 BOM 头、混合编码(如 GBK 写入后未转码)或不可见控制字符。
用什么命令快速检查 composer.json 编码和 BOM
别靠编辑器肉眼判断,终端一行命令就能确认:
-
file -i composer.json:看输出是否含charset=utf-8 -
hexdump -C composer.json | head -n 5:检查开头是否有ef bb bf(UTF-8 BOM),有就删 -
grep -P "\x80-\xFF" composer.json | head -n 1:快速探测是否存在非 ASCII 字节(提示可能不是纯 UTF-8)
VS Code / PhpStorm / Sublime 怎么永久避免保存成带 BOM 的 UTF-8
多数编辑器默认“UTF-8 with BOM”是历史遗留坑,必须手动关掉:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- VS Code:右下角点击编码名 → 选
Save with Encoding→ 点UTF-8(注意不是UTF-8 with BOM);再进Settings搜files.encoding,设为utf8 - PhpStorm:Settings → Editor → File Encodings → Global Encoding 和 Project Encoding 都选
UTF-8,勾掉Transparent native-to-ascii conversion,BOM 选项选Do not create BOM - Sublime:右下角编码名 →
Save with Encoding→UTF-8;另存为时务必确认底部状态栏显示的是UTF-8,不是UTF-8-BOM
CI/CD 流水线里怎么防住编码问题
本地没问题,CI 上崩了?大概率是 Git 提交时自动转码或构建机 locale 不一致。关键动作只有两个:
- 在
.gitattributes里加一行:composer.json text eol=lf encoding=utf-8,强制 Git 当作 UTF-8 文本处理 - CI 脚本开头加校验:
if ! [[ $(file -i composer.json) == *"charset=utf-8"* ]]; then echo "composer.json not UTF-8"; exit 1; fi - Git 提交前用
iconv -f GBK -t UTF-8 composer.json > tmp.json && mv tmp.json composer.json强制转码(仅限确认源文件是 GBK 场景)
真正麻烦的不是转码本身,而是团队里有人用 Windows 记事本改完直接提交——那个 BOM 会悄无声息混进 Git 历史,之后所有人的 composer install 都可能随机失败。










