VSCode终端中文乱码根源是终端进程未启用UTF-8编码,需同步配置PowerShell的chcp 65001、Git Bash的LANG/LC_ALL环境变量、Python的PYTHONIOENCODING,并关闭所有终端后重开生效。

VSCode终端中文乱码不是编辑器编码设错了,而是终端进程(PowerShell、Git Bash、WSL)没用 UTF-8 启动,或 Python/Node 等子进程读错了终端的编码协商结果——改 files.encoding 或调字体完全无效。
PowerShell 终端启动就乱码,chcp 显示 936
这是 Windows 默认代码页(GBK)和现代工具链(默认 UTF-8 输出)对不上。VSCode 启动的 PowerShell 进程继承了系统旧配置,没主动切 UTF-8。
- 临时验证:在终端里运行
chcp,输出“活动代码页: 936”就是根源;接着输chcp 65001,回车后立刻能显示中文(但新开终端又失效) - 一劳永逸:在
settings.json里加这段(注意-NoExit必须有,否则终端闪退):"terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "args": ["-NoExit", "-Command", "chcp 65001 > $null"] } } - 别碰
[Console]::OutputEncoding:它只影响 .NET 控制台 API,对python或node子进程完全无效
Python print("中文") 输出 □ 或空格,但 echo 你好 正常
说明终端本身能渲染中文,问题出在 Python 解释器启动时查了 GetConsoleOutputCP()(返回 936),于是把 sys.stdout.encoding 设成 cp936,和终端真实 UTF-8 行为冲突。
- 验证方式:运行
python -c "import sys; print(sys.stdout.encoding)",若输出cp936就是它 - 最稳方案:在
settings.json加环境变量,让 Python 强制走 UTF-8:"terminal.integrated.env.windows": { "PYTHONIOENCODING": "utf8" } - 不推荐在脚本里写
sys.stdout.reconfigure(encoding='utf-8'):3.7+ 才支持,且终端不真正支持时会抛AttributeError
Git Bash 终端中文路径报错或显示 ?
Git Bash 默认 UTF-8,但它依赖 LANG 和 LC_ALL 环境变量做 locale 检测。这两个变量为空或设成 C,它就会退到 ASCII 模式,拒绝处理中文路径。
- 检查方式:在 Git Bash 终端运行
locale,若输出含LANG=C或空白,就是问题 - 修复方式:在
settings.json加环境变量(值必须是zh_CN.UTF-8格式,不能写zh-CN.UTF-8):"terminal.integrated.env.windows": { "LANG": "zh_CN.UTF-8", "LC_ALL": "zh_CN.UTF-8" } - 确保 Git 安装时勾选了 “Use Windows' default console window” —— 否则底层 msys2 运行时不加载 locale
所有修改后必须关闭全部已打开的终端标签页,再按 Ctrl + Shift + ` 新开一个;旧终端进程不会刷新代码页或环境变量。真正的难点在于:不同 shell 的编码协商逻辑互不兼容,PowerShell 靠 chcp,Git Bash 靠 LANG,而 Python 又绕过这两者去查 Windows API —— 你得在三个层面同时对齐,漏一个就白配。


















