vscode终端中文乱码根本原因是终端子进程(如python/node)按gbk输出字节流,而vscode用utf-8解码导致错位;须运行chcp确认代码页为936(gbk)后,统一配置chcp 65001、pythonioencoding=utf8及powershell的$outputencoding为utf-8,并重启终端生效。

VSCode终端中文显示为方块、问号或“й你好”这类乱码,不是字体没选对,也不是文件保存编码错了——根本原因是终端子进程(如 python、node)输出的字节流,被 VSCode 用 UTF-8 解码,而实际是按 GBK(CP936)写的。必须让“写入端”和“读取端”统一用 UTF-8,缺一不可。
怎么确认当前终端代码页是不是GBK?
在 VSCode 集成终端里直接运行:
chcp
如果输出是 活动代码页: 936,说明正在用 GBK;输出 65001 才是 UTF-8。这一步不能跳过,否则所有后续配置都可能白设。
- 返回 936 → 必须改,且优先走
chcp 65001临时切换验证效果 - 返回 65001 但仍有乱码 → 问题不在终端代码页,而是 Python/Node 自身输出编码没对齐(见下一条)
-
chcp命令在 PowerShell 7+ 中默认不可用,需先执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser启用脚本权限
PowerShell 终端里 print("中文") 还是方块?
PowerShell 5.1 默认用 [System.Text.Encoding]::Default(即 GBK)输出,即使你设了 chcp 65001,它也不自动改 [Console]::OutputEncoding。Python 进程拿到的是 GBK 字节,VSCode 却按 UTF-8 解,必然崩。
- 临时修复:在终端里手动执行
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 - 永久生效:编辑
$PROFILE,末尾加一行[Console]::OutputEncoding = [System.Text.Encoding]::UTF8,保存后重启 VSCode - 别只靠
terminal.integrated.env.windows设PYTHONIOENCODING=utf8—— 它只影响 Python 的 stdin/stdout 编码感知,不解决 PowerShell 自身输出通道的错位
settings.json 里该加哪几行才真正起作用?
只加 "terminal.integrated.defaultEncoding": "utf8" 是无效的。VSCode 的 defaultEncoding 仅控制它自己如何解码子进程 stdout 字节流,不改变子进程的写入行为。必须配合环境变量与启动参数双管齐下:
- 必须加
"terminal.integrated.env.windows": {"CHCP": "65001", "PYTHONIOENCODING": "utf8"}——CHCP让 cmd/powershell 启动时自动切页,PYTHONIOENCODING强制 Python 用 UTF-8 读写管道 - PowerShell 用户额外加
"terminal.integrated.shellArgs.windows": ["-NoExit", "-Command", "chcp 65001 > $null"],避免$PROFILE加载前就输出乱码 - 如果已有
"terminal.integrated.env.windows"字段,不要重复声明对象,把新键值合并进去,否则 JSON 解析失败导致整个配置失效
为什么改了设置还是偶尔乱码?
最常被忽略的点:VSCode 的 Debug Console 和 Output 面板完全不走终端配置,它们直连 Node.js 主进程,而 Windows 上 Node 默认不启用 UTF-8 模式。哪怕终端一切正常,console.log("中文") 在 Debug Console 里仍可能是方块。
- 这个面板的编码由 VSCode 自身 Node 运行时决定,无法通过
terminal.*配置项干预 - 唯一稳定解法:升级到 VSCode 1.89+ 并确保系统启用了「Beta 版:使用 Unicode UTF-8 提供全球语言支持」(控制面板 → 区域 → 管理 → 更改系统区域设置)
- 老版本 VSCode + 未启用系统 UTF-8 的组合,Debug Console 中文乱码属于已知限制,强行配
env或改字体无解











