VSCode终端乱码主因是底层终端未启用UTF-8:cmd需chcp 65001,PowerShell需$OutputEncoding=[System.Text.Encoding]::UTF8,字体须显式配置中文字体如'Microsoft YaHei Mono',且必须关闭所有终端页签后重新打开。

VSCode 终端显示乱码,**80% 不是 VSCode 的锅,而是终端进程(cmd.exe、powershell.exe 或 bash)自己没用 UTF-8 启动,VSCode 只是“照搬”了它的乱码输出**。编码设对了、字体配好了,但终端底层仍以 GBK 输出字节,VSCode 再怎么解码也救不回来。
终端乱码先查 chcp 和 [Console]::OutputEncoding
Windows 下终端是否真在用 UTF-8,不能只看 VSCode 设置,得进终端里亲手验证:
- 在 VSCode 集成终端中运行
chcp—— 若返回不是65001(UTF-8 代码页),说明cmd根本没切换编码 - 在 PowerShell 中运行
[Console]::OutputEncoding—— 若输出不是System.Text.UTF8Encoding,说明 PowerShell 自己没设对输出编码 -
chcp 65001只对当前会话生效;要持久化,必须写进终端启动参数,比如在settings.json中配置:"terminal.integrated.profiles.windows": { "Command Prompt": { "path": "cmd.exe", "args": ["/k", "chcp", "65001"] } } - PowerShell 永久生效更推荐改
$PROFILE:添加一行$OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8,否则即使 VSCode 设了terminal.integrated.defaultEncoding: "utf8",也拦不住 PowerShell 先吐出 GBK 字节
terminal.integrated.fontFamily 必须显式指定中文字体
编码正确但依然显示方块?那是字体没撑住中文——VSCode 默认的 Consolas 或 Fira Code 本身不含中文字形,fallback 行为又不稳定,尤其开了连字(fontLigatures)后容易断掉。
- 不要只填
"Fira Code",要写成:"'Fira Code', 'Microsoft YaHei Mono', 'SimSun', 'Consolas'"(单引号包裹、逗号后空格、中文字体名用全称) -
Microsoft YaHei Mono比Microsoft YaHei更可靠,它是等宽变体,避免中英文混排时列对不齐 - 改完设置后,必须关闭所有终端页签再按
Ctrl+Shift+`新开一个——reload 窗口或只关终端再点加号都不行,旧进程字体缓存不会刷新 -
macOS/Linux 用户注意:
PingFang SC、Noto Sans CJK SC这类字体名必须拼写准确,不能写成“苹方”或“思源黑体”
别被“UTF-8 with BOM”和系统区域设置坑了
两个隐蔽但高频的雷:
- 文件本身是
UTF-8 with BOM,VSCode 会识别为UTF-8,但某些 Python 脚本或 Node.js 子进程读取时可能把 BOM 当作非法字符,导致后续解析错位——右下角点编码 →Save with Encoding→ 选UTF-8(不带 BOM) - Windows 系统勾选了“Beta 版:使用 Unicode UTF-8 提供全球语言支持”,看似利好,实则会让传统 CMD/PowerShell 的
chcp行为异常,有时反而触发双重编码转换。建议:若已启用并出现乱码,先取消勾选 + 重启,再单独靠chcp 65001和$OutputEncoding控制 - Python 脚本输出中文乱码?别只改 VSCode 设置。加一句
import sys; sys.stdout.reconfigure(encoding="utf-8")(Python 3.7+),或启动时加环境变量set PYTHONIOENCODING=utf-8
最常被跳过的一步:改完所有设置后,一定要关掉所有终端页签再新开——VSCode 终端进程是独立子进程,它的编码和字体是在启动瞬间确定的,后续改配置根本不影响它。










