Artisan 命令行中文输出乱码源于 Windows 默认 GBK 编码与 Laravel/PHP 的 UTF-8 处理冲突;解决方法是在 artisan 文件顶部 #!/usr/bin/env php 下添加 system('chcp 65001 > nul'); 强制终端切换为 UTF-8。

Artisan 命令行中文输出乱码,核心是 Windows 系统默认使用 GBK 编码,而 Laravel 和 PHP 内部以 UTF-8 处理字符串。终端没切换编码,字符就会被错误解释,显示为乱码或方块。Linux/macOS 通常默认 UTF-8,问题较少;Windows 用户需主动干预。
修改 artisan 文件强制切换终端编码
这是最直接有效的办法,适用于所有 Laravel 版本(5.x 至 11.x):
- 打开项目根目录下的 artisan 文件
- 在文件顶部
#!/usr/bin/env php下方、<?php标签之后立即插入以下代码:
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
exec('chcp 65001 > nul');
}
其中 chcp 65001 是 Windows 的命令,将当前命令行页(code page)设为 UTF-8。加 > nul 是为了隐藏执行提示,保持输出干净。
保存后,关闭并重新打开终端(CMD 或 PowerShell),再运行 php artisan list 或自定义命令,中文应正常显示。
检查并统一 PHP 文件本身编码
如果 Artisan 命令中调用了含中文的配置、日志、提示语(比如在 Command 类的 handle() 方法里写了 $this->info('处理完成');),而该 PHP 文件保存为 ANSI 或 GBK 编码,PHP 解析时会出错:
- 用 VS Code、PhpStorm 等编辑器打开相关 PHP 文件(尤其是自定义命令类)
- 确认右下角显示编码为 UTF-8(不是 UTF-8 with BOM)
- 若显示 GBK/ANSI,点击编码名 → “Save with Encoding” → 选 UTF-8
注意:.env 文件也必须是 UTF-8 编码,否则 APP_NAME=后台管理系统 这类值读取后可能变乱码。
PowerShell 用户额外设置
PowerShell 默认输出编码不总是 UTF-8,尤其旧版本(5.1):
- 临时生效:在运行 Artisan 前,先执行
[Console]::OutputEncoding = [Text.UTF8Encoding]::new() - 永久生效:将上述命令加入 PowerShell 配置文件
$PROFILE(如不存在可New-Item -Path $PROFILE -Force创建)
这样不仅 Artisan,所有 PHP 脚本输出中文都能正确渲染。
验证是否修复成功
写一个最小测试命令快速验证:
- 运行
php artisan tinker - 输入
echo "中文测试\n";—— 应显示清晰中文 - 再输入
dd(['msg' => '你好世界']);—— 数组键值中的中文不应是问号或乱码
两项都正常,说明终端环境和 PHP 解析层已对齐 UTF-8。


















