根本原因是windows终端编码页继承不一致,vscode终端需配置chcp 65001并设置pythonioencoding=utf-8,git bash/wsl则需配置lang=zh_cn.utf-8。

为什么 VSCode 终端中文显示为方块或问号,但编辑器里一切正常
根本原因不是字体或编码设置错了,而是 Windows 默认终端(conhost)和 VSCode 内置终端(基于 Windows Terminal 或 legacy console)对 chcp 编码页的继承逻辑不一致。编辑器用 UTF-8 渲染文本,但终端启动时可能沿用了系统默认的 GBK(chcp 936),导致 Python/Node.js 等进程输出的 UTF-8 字节被当成 GBK 解码,结果就是乱码。
在 VSCode 设置中强制终端使用 UTF-8 编码
VSCode 本身支持通过配置让集成终端启动时自动切换编码页。关键不是改系统 chcp,而是让终端进程一启动就执行 chcp 65001:
- 打开 VSCode 设置(
Ctrl + ,),搜索terminal.integrated.profiles.windows - 点击「在 settings.json 中编辑」,添加或修改 Windows 终端配置项
- 确保 PowerShell 或 Command Prompt 的
args包含chcp 65001,例如:
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell",
"args": ["-NoExit", "-Command", "chcp 65001 > $null"]
},
"Command Prompt": {
"path": ["cmd.exe"],
"args": ["/c", "chcp 65001 > nul && cmd.exe"]
}
}
注意:> $null(PowerShell)和 > nul(cmd)用于隐藏 Active code page: 65001 提示行,避免干扰输出。
Python 脚本输出中文仍乱码?检查 sys.stdout.encoding
即使终端已设为 UTF-8,Python 进程可能因环境变量未生效,仍用 mbcs(即系统 ANSI 编码)编码 stdout。运行以下代码验证:
import sys print(sys.stdout.encoding)
如果输出是 mbcs 而非 utf-8,说明 Python 没有正确识别终端编码。临时解决方法:
- 在脚本开头加
import os; os.environ['PYTHONIOENCODING'] = 'utf-8' - 或启动时加参数:
python -X utf8 script.py(Python 3.7+) - 更彻底:在 VSCode 的
settings.json中设置终端环境变量:"terminal.integrated.env.windows": { "PYTHONIOENCODING": "utf-8" }
Git Bash / WSL 终端中文乱码的特殊处理
这类终端不走 Windows chcp,但默认 LANG 可能是 C 或 en_US.UTF-8,而中文路径/输出需要 zh_CN.UTF-8:
- Git Bash:在
~/.bashrc末尾加export LANG=zh_CN.UTF-8,然后重启终端 - WSL:编辑
/etc/wsl.conf,添加[boot] command="locale-gen zh_CN.UTF-8",再运行wsl --shutdown重启 - VSCode 中确认 WSL 终端使用的是
bash而非sh(后者可能忽略.bashrc)
Windows Terminal 自身的字体设置(如启用 Noto Sans CJK SC)会影响显示,但前提是编码已正确——先解决 chcp 和 LANG,再调字体。











