根本原因是windows终端默认gbk与工具链utf-8输出冲突,需统一配置powershell启动参数chcp 65001、python环境变量pythonioencoding=utf-8及git bash的lang=zh_cn.utf-8,并重启vscode生效。

VSCode里输入中文变问号或乱码,不是文件编码设错了,而是终端进程根本没走 UTF-8 编码路径——Windows 默认用 GBK(代码页 936),而 Python、C、Java 等工具链默认按 UTF-8 输出/读取,解码错位就必然显示 ? 或方块。
PowerShell 终端必须加 chcp 65001 启动参数
手动在终端里输 chcp 65001 能临时修复,但新开终端就失效,说明没嵌入启动流程。VSCode 的 terminal.integrated.profiles.windows 必须显式配置:
-
args要带["-NoExit", "-Command", "chcp 65001 > $null"],缺-NoExit会导致命令执行完终端直接退出 -
$null是为了隐藏Active code page: 65001提示,不加也不影响功能 - 改完后必须重启 VSCode,仅“重新打开终端”无效——旧 shell 进程的环境已固化
- 验证是否生效:新开终端后运行
[Console]::OutputEncoding,应返回System.Text.UTF8Encoding
Python 输出中文仍乱码?检查 sys.stdout.encoding
即使终端已切到 UTF-8,Python 进程可能仍缓存旧的 cp936 编码,导致 print("你好") 显示 ??:
- 临时验证:终端先运行
chcp 65001,再执行python -c "import sys; print(sys.stdout.encoding)",必须看到utf-8 - 不要在 Python 里硬写
sys.stdout.reconfigure(encoding='utf-8'):它只在 Python 3.7+ 且终端真正支持时才生效,否则抛AttributeError - 更稳妥的做法是在 VSCode 用户设置 JSON 中加
terminal.integrated.env.windows,设PYTHONIOENCODING=utf-8和LANG=zh_CN.UTF-8
Git Bash 中文路径或输出异常?LANG 不能为空或 C
Git Bash 本身支持 UTF-8,但它依赖 LANG 和 LC_ALL 判断是否启用宽字符支持。一旦这两个变量是空值或 C,它就退回到 ASCII 模式:
- 运行
locale查看当前值,若输出含zh_CN.GBK或为空,说明未启用 UTF-8 - 在 VSCode 设置中添加:
"terminal.integrated.env.windows": { "LANG": "zh_CN.UTF-8", "LC_ALL": "zh_CN.UTF-8" } - 不需要改
~/.bashrc,VSCode 集成终端不继承用户 shell 的环境变量,必须通过env.windows注入
最常被忽略的一点:所有配置改完后,必须关掉所有 VSCode 实例再重开——哪怕只是改了 settings.json,旧进程里的终端子系统(conhost)不会刷新编码状态。











