vscode终端中文显示方块或问号是因windows终端默认用cp936解码而python等按utf-8输出导致的解码错配;需通过chcp 65001切换代码页,并在powershell中显式设置$outputencoding和[console]::outputencoding为utf8,同时python脚本中调用sys.stdout.reconfigure(encoding='utf-8')确保输出编码一致。

VSCode终端输出中文是方块或问号,不是文件编码问题
终端里 print("你好") 显示 □□ 或 ????,和你右下角显示的 UTF-8 完全无关。这是 Windows 终端子系统(conhost)默认用 CP936(即 GBK)解码,而 Python/Node.js 默认按 UTF-8 输出字节导致的“解码错配”。编辑器里文件保存为 UTF-8 对终端输出没影响。
- 不要反复点击右下角改编码——那是给文件读取用的,不控制终端
- 不要只改
files.encoding——它管不了stdout - 临时验证:在终端里手动执行
chcp 65001,再跑脚本,如果立刻正常,就坐实是终端代码页问题
PowerShell 终端必须设 $OutputEncoding 和 chcp 65001
PowerShell 5.1 和 7+ 都默认把 [Console]::OutputEncoding 设为 Default(即 CP936),即使你运行了 chcp 65001,它仍可能按旧编码写 stdout。必须显式重置输出编码。
- 在 VSCode 的
settings.json中加这段:
{
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"args": ["-NoExit", "-Command", "chcp 65001 | Out-Null; [Console]::OutputEncoding = [System.Text.Encoding]::UTF8"]
}
},
"terminal.integrated.defaultProfile.windows": "PowerShell"
}
- 别用
cmd:它的 Unicode 支持更弱,chcp 65001后仍可能崩 - 别信
PYTHONIOENCODING=utf8环境变量:VSCode 调试器和部分插件不读它,靠不住
Python 脚本里要主动声明编码(尤其 sys.stdout)
即使终端和 PowerShell 都设对了,Python 3.6 及更早版本默认不把 sys.stdout 绑定到 UTF-8,遇到非 ASCII 字符仍可能 fallback 到 locale 编码。
- 在脚本开头加:
import sys
if hasattr(sys.stdout, 'reconfigure'):
sys.stdout.reconfigure(encoding='utf-8')
- Python print("你好", flush=True) + 确保终端已
chcp 65001,别依赖自动检测 - 写日志到文件?那是
open(..., encoding='utf-8')的事,和 VSCode 终端设置无关
系统级 UTF-8 开关不能跳过
VSCode 设置只能管自己开的终端;但双击运行 .bat、命令行启动其他工具(如 git bash、cmake)、甚至某些 IDE 插件调用的 shell,依然走系统默认代码页。不打开这个开关,问题会反复出现在各种角落。
- 路径:
控制面板 → 区域 → 管理 → 更改系统区域设置 → 勾选「Beta 版:使用 Unicode UTF-8 提供全球语言支持」 - 必须重启生效,不是注销
- 勾选后,
chcp命令返回值变成65001,且所有新启动的 cmd/powershell 进程默认就是 UTF-8
最常被忽略的是:VSCode 内置终端设对了,但外部终端(如 Windows Terminal 单独开的)还是乱码——那说明系统层没动。两层都得动,缺一不可。











