vscode终端中文乱码需同步配置四环节:chcp 65001切utf-8代码页、设pythonioencoding=utf8环境变量、powershell中$outputencoding=unicode、终端启动参数注入chcp命令,缺一不可。

VSCode 控制台(集成终端)输出中文乱码,和编辑器里文件编码设置完全无关——改 files.encoding 没用,必须动终端运行时环境。
终端 print("中文") 显示方块或问号?检查 chcp 输出
先确认终端当前代码页:在 VSCode 终端里执行 chcp。如果返回 活动代码页: 936,说明它正用 GBK 解码,但 Python 或 Node.js 默认按 UTF-8 输出,两边对不上。
- 只改 VSCode 设置里的
files.encoding或点右下角转文件编码,对终端输出零影响 - 临时验证:输
chcp 65001切到 UTF-8 代码页,再跑python -c "print('你好')",若变正常,就坐实是 shell 层编码问题 - PowerShell 用户额外注意:
chcp 65001只对当前会话生效;关掉终端重开又回 936,得靠配置固化
永久生效:配 PYTHONIOENCODING 和 $OutputEncoding
VSCode 不直接控制终端编码,而是通过注入环境变量和启动命令来影响子进程。关键不是“让终端支持 UTF-8”,而是“让 Python/Node 进程强制用 UTF-8 输出”。
- 在用户或工作区
settings.json中加这一段(Windows):
"terminal.integrated.env.windows": {
"PYTHONIOENCODING": "utf8"
}
$PROFILE,追加一行:[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
UTF-8 或 utf-8 —— PYTHONIOENCODING 只认 utf8(全小写无短横),否则 Python 直接忽略cmd 和 PowerShell 的启动参数不能省
仅设环境变量还不够。VSCode 启动终端时,若没显式调用 chcp 65001,PowerShell/CMD 仍可能沿用系统默认代码页(936)初始化,导致环境变量还没起效前就崩了。
- 在
settings.json中配置 profile 启动参数(以 PowerShell 为例):
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"args": ["-NoExit", "-Command", "$env:PYTHONIOENCODING='utf8'; chcp 65001 > $null"]
}
}
args 改成:["/c", "chcp 65001 > nul && cmd.exe"]
"terminal.integrated.defaultProfile.windows": "PowerShell",确保新终端默认走你配的 profileterminal.integrated.fontFamily,填 "Cascadia Code", "Microsoft YaHei" 这类组合真正容易被忽略的是:终端乱码从来不是单点问题。它卡在操作系统代码页、shell 初始化流程、Python 运行时环境变量、VSCode 启动注入四个环节之间。少配任意一环,都可能某天突然复现——比如更新 PowerShell 版本后 $PROFILE 不再自动加载,或者 Git Bash 被设为默认终端却没单独配其环境。











