终端中文乱码根源是windows终端默认gbk编码与工具链utf-8输出不匹配,需同步调整终端编码(chcp 65001或$outputencoding)、字体(cascadia code+微软雅黑)及启动参数,三者缺一不可。

终端输出中文是 □□□ 或 ?,不是 VSCode 的错
这是终端进程(powershell.exe、cmd.exe)本身没用 UTF-8 启动,VSCode 只是照搬它的输出。Windows 中文版默认代码页是 936(GBK),而 Node.js、Python 等工具链默认按 UTF-8 解析 stdout 字节流——两边不匹配,字就塌了。
- 先在 VS Code 终端里运行
chcp,如果输出是活动代码页: 936,那根源就在这儿 - 别急着改
settings.json,先验证:在终端里直接输入echo 你好,看是否乱码;如果乱码,说明是终端层问题,不是编辑器字体或文件编码的事 -
[Console]::OutputEncoding在 PowerShell 里只影响 .NET 控制台 API,对node、python进程无效;真正起作用的是$OutputEncoding
PowerShell 终端一键切 UTF-8(推荐临时+永久双解法)
最轻量、见效最快的改法,就是让 PowerShell 主动把输出转成 UTF-8 字节流,所有子进程(比如你跑的 python app.py)都跟着受益。
- 临时生效(当前终端会话):
$OutputEncoding = [System.Text.UTF8Encoding]::new() - 永久生效:运行
notepad $PROFILE(若提示不存在就先New-Item -Type File -Path $PROFILE -Force),在打开的Microsoft.PowerShell_profile.ps1末尾追加上面那行 - 别写成
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8——它只管 .NET 自己的WriteLine,管不了 Python 的print - 也别设成
UTF7或ASCII,那是给乱码加戏
VS Code 启动终端前自动执行 chcp 65001
比改 PowerShell 变量更底层,连 C++ 的 printf 都能救回来,尤其适合你用 cmd 或旧版 PowerShell,或者不想动系统配置文件时。
- 打开
settings.json,加入这段配置:
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"args": ["-NoExit", "-Command", "chcp 65001 > $null"]
}
}
-NoExit 必须加,否则终端启动完立刻退出> $null 是为了隐藏那行 活动代码页: 65001 提示,不然每次开终端都闪一下Ctrl + Shift + ` 新开一个,旧终端不会刷新字体没配对,UTF-8 也白搭
即使编码全对,如果终端用的等宽字体(比如 Consolas、Fira Code)本身不含中文字形,VSCode fallback 行为不稳定,尤其开了连字(ligature)时容易断笔、显示方块。
- 在设置里搜
terminal.integrated.fontFamily,填入:'Cascadia Code', 'Microsoft YaHei', monospace - Windows 用户务必右键终端 →「属性」→「字体」,手动选
Cascadia Code或Consolas(仅靠 VS Code 设置不够) - 别用
SimSun(宋体)当主力等宽字体,它不是为编程设计的,行高和字宽不均,长期看眼睛累 - 改完必须关闭再重开终端,reload window 不生效
最容易被忽略的是:终端乱码往往不是单点问题,而是编码 + 字体 + 启动参数三者没对齐。比如你设了 $OutputEncoding,但终端字体还是 Lucida Console,照样出方块;又比如你配了 chcp 65001,但 PowerShell profile 里又写了 [Console]::OutputEncoding = ...,反而互相干扰。修的时候盯住一个变量,其他先冻结。











