chcp 65001是解决composer中文乱码最短路径,可立即生效但仅限当前终端;根本原因是windows终端默认gbk(chcp 936)与composer固定utf-8输出不匹配,导致问号、方块或八进制转义;powershell可通过命令持久调用,bom、wsl挂载点及composer_home路径错误亦为常见干扰源。

chcp 65001 是最短路径,但只对当前窗口生效
Windows CMD 和旧版 PowerShell 默认用 chcp 936(GBK)解码输出,而 Composer 固定输出 UTF-8 字节流。不匹配就显示问号、方块或八进制转义(如 \344\273\245)。执行 chcp 65001 能立刻让中文正常显示,但它仅作用于当前终端会话——关掉窗口就失效。
PowerShell 更可靠:直接运行 powershell -ExecutionPolicy RemoteSigned -Command "chcp 65001 | Out-Null; composer install"。若需长期生效,把 chcp 65001 > $null 加到 $PROFILE 文件末尾。
注意:--no-ansi 参数可临时绕过颜色与 Unicode 控制符干扰,适用于调试阶段:composer update --no-ansi。
composer.json 带 BOM 就会触发 JSON decode error
错误信息像 JSON decode error: Syntax error,其实不是语法错,而是文件开头有 \xEF\xBB\xBF(UTF-8 BOM)。PHP 的 json_decode() 对 BOM 敏感,一读就拒。
确认方式:file -i composer.json(Linux/macOS),或在 VS Code 右下角看编码标识——显示 UTF-8 with BOM 就是它。
修复方法:
- VS Code:右下角点编码名 →
Save with Encoding→ 选UTF-8(注意不是UTF-8 with BOM) - Linux/macOS 命令行:
sed -i '1s/^\xEF\xBB\xBF//' composer.json - PowerShell:
(Get-Content composer.json -Raw) -replace "\uFEFF", "" | Set-Content composer.json -Encoding UTF8
别用 Windows 记事本保存 composer.json,它默认加 BOM。
WSL 下 vendor 目录挂载在 /mnt/c 就注定慢
根本瓶颈在文件系统层:WSL 通过 9P 协议挂载 Windows 路径(如 /mnt/c/Users/name/project),而 composer install 大量读写小文件(vendor/、composer.lock),9P 的元数据操作极低效——实测比 WSL 本地 ext4 慢 5–10 倍。
在 Windows 上执行终端命令,或对比 Windows 与 Linux 的 Shell 语法时使用。建议先检测当前 Shell 是 PowerShell 还是 cmd.exe,再给出相应命令……
必须把项目移到 WSL 本地路径,例如 ~/projects/myapp。验证方式:df -h .,Filesystem 列应为 ext4 或 zfs,而非 9p。
顺手禁用 Windows Defender 对 ext4.vhdx 的扫描,否则解压数百包时会高频 IO + 扫描冲突。PowerShell 管理员命令:Set-MpPreference -ExclusionPath "C:\Users\YourName\AppData\Local\Packages\Ubuntu_123456789\LocalState\ext4.vhdx"。
COMPOSER_HOME 路径含中文或变量就静默失效
Composer 只认硬编码英文环境变量,COMPOSER_HOME 一旦含中文、~、$HOME 或 %USERPROFILE%,就会退回到默认路径(%APPDATA%\Composer 或 $HOME/.composer),且不报错。
Windows 正确写法:setx COMPOSER_HOME "C:\Users\YourName\AppData\Roaming\Composer"(必须英文路径,不能写 C:\用户\name\.composer)。
macOS/Linux 正确写法:export COMPOSER_HOME="/Users/yourname/.my-composer"(不能写 ~/my-composer)。
设完必须新开终端验证:composer config --list --global,检查 “Global configuration file” 行是否匹配你设的路径;再确认 PATH 包含 %COMPOSER_HOME%\vendor\bin(Windows)或 $COMPOSER_HOME/vendor/bin(macOS/Linux)。
真正卡住人的地方往往不在 Composer 本身:终端编码、BOM、WSL 挂载点、环境变量路径——这些环节只要一个没对齐,就表现为“乱码”或“超慢”,但错误提示从不直说根源。










