vscode终端中文乱码主因是终端进程未启用utf-8编码,而非编辑器设置错误;需统一配置powershell代码页(chcp 65001)、python环境变量(pythonioencoding=utf8)、git bash locale(lang=zh_cn.utf-8)及中文字体链,并重启终端生效。

VSCode终端中文乱码不是编辑器“编码设错了”,而是终端进程(PowerShell、Git Bash、WSL)没用 UTF-8 启动,或 Python/Node 等工具链没按 UTF-8 解码字节流——改字体、调 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 解释器启动时读错了编码。Windows 下它会查 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 - 避免用
set PYTHONIOENCODING=utf8 & python xxx.py手动前缀:容易漏,也难维护
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 Bash 时务必勾选 “Use Windows' default console code page” —— 没勾选才真正启用 UTF-8 支持
- 别在
~/.bashrc里写export LANG=C:这是高频踩坑点,会覆盖 VSCode 的设置
终端字体还是显示方块,即使编码已对齐
编码正确只是前提,字体不支持中文照样是□。VSCode 编辑器字体(editor.fontFamily)和终端字体(terminal.integrated.fontFamily)是两套独立配置,必须分别设。
- Windows 推荐终端字体链:
"terminal.integrated.fontFamily": "'Cascadia Code', 'Microsoft YaHei', monospace"
- 改完后必须关闭当前终端,再按
Ctrl + Shift + `新开一个——旧终端不会刷新字体 - Windows 用户额外注意:右键终端标题栏 → 属性 → 字体,也要手动选
Cascadia Code或Consolas,仅靠 VSCode 设置不够 - macOS/Linux 用户若用 iTerm2/GNOME Terminal,得单独设它们的字体为
SF Mono SC或Noto Sans CJK SC,否则 VSCode 终端仍 fallback 失败
真正麻烦的是多层环境嵌套:比如 WSL 里跑 Python,又通过 VSCode 连过去——这时 VSCode 的 terminal.integrated.env.* 不生效,得去 WSL 侧改 /etc/default/locale;而 macOS 上 VSCode 若非从终端启动(比如从 Dock 点开),~/.zshrc 里的 export LANG 也不会被继承,必须靠 terminal.integrated.env.osx 补上。











